zoukankan      html  css  js  c++  java
  • 操蛋的Django model------select_related() 主要用于一对一和一对多

    实例:

    创建表,表都是一对一,一对多

    class Province(models.Model):
        name = models.CharField(max_length=10)
    class City(models.Model):
        name = models.CharField(max_length=5)
        province = models.ForeignKey(Province)#province是字段名
    class Person(models.Model):
        firstname  = models.CharField(max_length=10)
        lastname   = models.CharField(max_length=10)
        visitation = models.ManyToManyField(City, related_name = "visitor")
        hometown   = models.ForeignKey(City, related_name = "birth")
        living     = models.ForeignKey(City, related_name = "citizen")

    2.对于一对一字段(OneToOneField)和外键字段(ForeignKey),可以使用select_related 来对QuerySet进行优化,在对QuerySet使用select_related()函数后,Django会获取相应外键对应的对象,从而在之后需要的时候不必再查询数据库了。

    3.select_related() 接受可变长参数,每个参数是需要获取的外键(父表的内容)的字段名,以及外键的外键的字段名、外键的外键的外键…。若要选择外键的外键需要使用两个下划线“__”来连接。

    以上例说明,如果我们需要打印数据库中的所有市及其所属省份,使用select_related的做法是:

    citys = models.city.objects.select_related('province').all()
    for p in citys:
    print(p.province)

    我们要获得张三的现居省份,可以用如下方式:(张三的外键是city,city的外键是province,即外键的外键,要用双下划线__)

    zhangs = Person.objects.select_related('living__province').get(firstname=u"",lastname=u"") 
    print(zhangs.living.province)
  • 相关阅读:
    使用docker-client创建NFS挂载
    递归遍历JSON树
    electron-builder中NSIS相关配置
    nodejs调试基础【转载】
    node-java模块
    NodeJs中使用jQuery?
    如何实现electron多页面间通信
    转载:【知乎Live】狼叔:如何正确的学习Node.js
    js对象替换键值名称
    Eclipse 调试 darknet 代码
  • 原文地址:https://www.cnblogs.com/wt11/p/6392972.html
Copyright © 2011-2022 走看看