表間關係主外鍵約束,主表存在字表的約束字段。java
在一對多或者多對多的狀況下,能夠採用正面查詢操做,和反面查詢操做。git
正面查詢,採用主表查詢的對象加字表的約束字段。spa
反向查詢用子表的對象用表名小寫加set加all方法。code
以下實例:對象
表間關係字段blog
class Book(models.Model): nid=models.AutoField(primary_key=True) title=models.CharField(max_length=32) price=models.DecimalField(max_digits=8,decimal_places=2) pub_date=models.DateField() publish=models.ForeignKey(to='Publish',on_delete=models.CASCADE) #級聯刪除
author=models.ManyToManyField(to='Author') def __str__(self): return self.title #出版社
class Publish(models.Model): nid=models.AutoField(primary_key=True) name=models.CharField(max_length=32) email=models.CharField(max_length=32) #做者
class Author(models.Model): nid=models.AutoField(primary_key=True) name=models.CharField(max_length=32) age=models.IntegerField() email=models.CharField(max_length=32) ad=models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE) #級聯刪除
def __str__(self): return self.name #做者詳情
class AuthorDetail(models.Model): nid = models.AutoField(primary_key=True) addr=models.CharField(max_length=32) tel=models.IntegerField()
查詢java這本書的做者的名字和年齡:ci
正面查詢it
# book_obj = models.Book.objects.filter(title__contains='Java').first()
# print(book_obj.author.all().values('name','age'))
王璐寫過的書籍名稱和價格class
反向查詢email
# aut_obj = models.Author.objects.filter(name='王璐').first()
# print(aut_obj.book_set.all().values('title','price'))
*****************************************************************************
一對一的表間關係則不須要all方法或者添加_set屬性
做者李明的詳細信息
正向查詢
# aut_obj = models.Author.objects.filter(name='胡文遠').first()
# print(aut_obj.ad.addr,aut_obj.ad.tel)
湖北籍的做者信息(此處狀況特殊仍舊是一對一)
反向查詢
obj = models.AuthorDetail.objects.filter(addr__contains='湖北').first() print(obj.author.name)