表间关系主外键约束,主表存在字表的约束字段。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)