表于表的查询

一对多的表结构 外键是在多的那张表里面建的。如下图

#书和出版社是多对一的关系。
#
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")
原文地址:https://www.cnblogs.com/seanliang/p/9209645.html