本文實例講述了Django框架多表查詢。分享給大家供大家參考,具體如下:
多表查詢是模型層的重要功能之一, Django提供了一套基于關聯字段獨特的解決方案.
來自Django官方文檔的模型示例:
from django.db import modelsclass Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField()class Author(models.Model): name = models.CharField(max_length=50) email = models.EmailField()class Entry(models.Model): blog = models.ForeignKey(Blog) authors = models.ManyToManyField(Author) headline = models.CharField(max_length=255) body_text = models.TextField() pub_date = models.DateField() mod_date = models.DateField() n_comments = models.IntegerField() n_pingbacks = models.IntegerField() rating = models.IntegerField()
ForeignKey字段接受一個Model類作為參數, 類型與被參照的字段完全相同:
blog = models.ForeignKey(Blog)
ForeignKey.to_field
關聯到的關聯對象的字段名稱。默認地,Django 使用關聯對象的主鍵。
blog = models.ForeignKey(Blog, to_field=Blog.name)
ForeignKey.db_constraint
Django Model的ForeignKey字段的主要功能是維護一個一對多的關系, 以進行關聯查詢.
只有在db_constraint=True
時Django model才會在數據庫上建立外鍵約束, 在該值為False時不建立約束.
默認db_constraint=True
.
ForeignKey.related_name
這個名稱用于讓關聯的對象反查到源對象.
如果你不想讓Django 創建一個反向關聯,請設置related_name 為 '+' 或者以'+' 結尾.
ForeignKey.related_query_name
以ForeignKey.related_name
作為默認值, 兩者功能的具體說明請參見相關文檔
前向查詢
若關系模型A包含與模型B關聯的關聯字段, 模型A的實例可以通過關聯字段訪問與其關聯的模型B的實例:
>>> e = Entry.objects.get(id=2)>>> e.blog # Returns the related Blog object.
修改e.blog
并調用save方法存入數據庫
>>> e.blog = some_blog>>> e.save()
如果ForeignKey 字段有null=True
設置(即它允許NULL值),可以分配None來刪除對應的關聯性
>>> e = Entry.objects.get(id=2)>>> e.blog = None>>> e.save() # "UPDATE blog_entry SET blog_id = NULL ...;"
Django提供了一種使用雙下劃線__
的查詢語法:
>>> Entry.objects.filter(blog__name='Beatles Blog')
反向查詢
被索引的關系模型可以訪問所有參照它的模型的實例,如Entry.blog作為Blog的外鍵,默認情況下
新聞熱點
疑難解答