操蛋的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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM