Django学习之ORM外键跨表查询

外键的跨表查询

首先创建两外键关联的表

from django.db import models

class Book(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32, verbose_name="Book名称")
    publishers = models.ForeignKey("Publisher",on_delete=models.CASCADE)

class Publisher(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32, verbose_name="出版社名称")

正向查询(定义:从定义外键的这张表去查询另外的一张表):
那么,从Book表去查Publisher就是正向查询,反之,就是反向查询
基于对象的跨表查询:

语法:
关联字段.字段
book_obj = models.Book.objects.first()  # 第一本书对象
print(book_obj.publisher)  # 得到这本书关联的出版社对象
print(book_obj.publisher.name)  # 得到出版社对象的名称

字段的跨表查询:

语法:
关联字段__字段
print(models.Book.objects.values_list("publisher__name"))

反向查询(与正向查询相对):
基于对象的跨表查询:

语法:
对象.表名_set
publisher_obj = models.Publisher.objects.first()  # 找到第一个出版社对象
books = publisher_obj.book_set.all()  # 找到第一个出版社出版的所有书
names = books.values_list("name")  # 找到第一个出版社出版的所有书的书名

字段的跨表查询:

names= models.Publisher.objects.values_list("book__name")

你可能感兴趣的:(Django学习之ORM外键跨表查询)