一对多的表结构 外键是在多的那张表里面建的。如下图
#书和出版社是多对一的关系。 #书 class Book(models.Model): title = models.CharField(max_length=32) publish_date = models.DateField(auto_now_add=True) price = models.DecimalField(max_digits=5, decimal_places=2) # 创建外键,关联publish publisher = models.ForeignKey(to="Publisher") #出版社 class Publisher(models.Model): name = models.CharField(max_length=32) city = models.CharField(max_length=32)
数据如下
1 正向查询(有外键的类)
使用values('你类中外键的那个字段,然后__外键的那个的字段') 就可以查询了。如下图
ForeignKey操作
正向查找
对象查找(跨表)
如下的方法
get()
first()
last()
语法:
对象.关联字段.字段
示例:
book_obj = models.Book.objects.first() # 第一本书对象 print(book_obj.publisher) # 得到这本书关联的出版社对象 print(book_obj.publisher.name) # 得到出版社对象的名称
字段查找(跨表)
all()
filter()
exclude()
order_by()
reverse()
distinct()
语法:
关联字段__字段
示例:
print(models.Book.objects.values_list("publisher__name"))
反向操作
对象查找
get()
first()
last()
语法:
obj.表名_set
示例:
publisher_obj = models.Publisher.objects.first() # 找到第一个出版社对象 books = publisher_obj.book_set.all() # 找到第一个出版社出版的所有书 titles = books.values_list("title") # 找到第一个出版社出版的所有书的书名
字段查找
all()
filter()
exclude()
order_by()
reverse()
distinct()
语法:
表名__字段
示例:
titles = models.Publisher.objects.values_list("book__title")