Django默认ORM(四):一对多(O2M)外键操作

外键关联表操作:正反向操作

比如说:有虾面这俩表,填充一些数据

    from django.db import models

    class UserType(models.Model):
        """
        用户类型
        """
        title = models.CharField(max_length=32)

    class UserInfo(models.Model):
        """
        用户表
        """
        name = models.CharField(max_length=16)
        age = models.IntegerField()
        ut = models.ForeignKey('UserType')


外键关联表操作:正反向操作

    # UserInfo,如果这个表中有外键,ut是外键FK字段 - 那么正向操作
    # obj = models.UserInfo.objects.all().first()
    # 取本表字段:obj.name;obj.age
    # 取外键关联表字段:obj.ut.title

    # UserType, 表名小写_set.all()  - 反向操作
    # obj = models.UserType.objects.all().first()
    # 取本表字段:obj.id,obj.title
    # 根据本表取UserInfo字段:
      for row in obj.userinfo_set.all():
    #     print(row.name,row.age)

    # result = models.UserType.objects.all()
    # for item in result:
    #     print(item.title,item.userinfo_set.filter(name='xx'))

  

values()与values_list() 返回本表数据的字典格式和元组格式

注意 :values()  取出来的是字典格式;values_list() 取出来的是元组格式
    # result = models.UserInfo.objects.all().values('id','name')
    # QuerySet[{'id':'xx','name':'xx'} ]
    # for row in result:
    #     print(row)

    # result = models.UserInfo.objects.all().values_list('id','name')
    # QuerySet[(1,'f'), ]
    # for row in result:
    #     print(row)

    # 数据获取多个数据时
    # 1. [obj,obj,obj,]
    # models.UserInfo.objects.all()
    # models.UserInfo.objects.filter(id__gt=1)
    # result = models.UserInfo.objects.all()
    # for item in result:
    #     print(item.name,item.ut.title)

    # 2. [{id:1,name:fd},{id:1,name:fd},{id:1,name:fd},]
    # models.UserInfo.objects.all().values('id','name')
    # models.UserInfo.objects.filter(id__gt=1).values('id','name')

  

跨表返回更加丰富数据的字典和元组格式

    # 不跨表只能取自己表数据
    # result = models.UserInfo.objects.all().values('id','name')
    # for item in result:
    #     print(item['id'],item['name'])

    # 利用神奇的__,跨表取字段返回一个包含表内字段的字典
    # result = models.UserInfo.objects.all().values('id','name',"ut__title")
    # for item in result:
    #     print(item['id'],item['name'],item['ut__title'])


    # 3. [(1,df),(2,'df')]
    # models.UserInfo.objects.all().values_list('id','name')
    # models.UserInfo.objects.filter(id__gt=1).values_list('id','name')
    # 不跨表只能取自己表数据
    # result = models.UserInfo.objects.all().values_list('id','name')
    # for item in result:
    #     print(item[0],item[1])

    # 利用神奇的__,跨表取字段返回一个包含表内字段的字典
    # result = models.UserInfo.objects.all().values_list('id','name',"ut__title")
    # for item in result:
    #     print(item[0],item[1],item[2])

  

 

posted @ 2017-09-22 15:54  Adamanter  阅读(207)  评论(0编辑  收藏  举报