Django:关联查询

一、数据准备

1、创建应用books

2、setting.py中注册应用

3、定义模型类

from django.db import models


# Create your models here.
# 定义图书模型类Book
class Book(models.Model):
    title = models.CharField(max_length=20, verbose_name='图书名称')
    read = models.IntegerField(default=0, verbose_name='阅读量')
    comment = models.IntegerField(default=0, verbose_name='评论量')

    def __str__(self):
        return self.title

    class Meta:
        db_table = 't_book'


# 定义人物表 Person
class Person(models.Model):
    name = models.CharField(max_length=20, verbose_name='人物姓名')
    gender = models.BooleanField(default=True, verbose_name='性别')
    book = models.ForeignKey(Book, verbose_name='所属图书', on_delete=models.CASCADE)

    def __str__(self):
        return self.name

    class Meta:
        db_table = 't_person'

4、激活模型

  • 生成迁移:python manage.py makemigrations

  • 执行迁移:python manage.py migrate

5、Admin注册

6、数据准备

登录Admin后台添加一些测试数据

 

 二、通过对象执行关联查询

由一到多的访问语法:

# 一对应的模型类对象.多对应的模型类名小写_set
# 查询编号为1的图书。
book=Book.objects.get(id=1)
# 获得book图书的所有人物。
book.person_set.all()

由多到一的访问语法:

#多对应的模型类对象.多对应的模型类中的关系类属性名
p = Person.objects.get(id=1)
p.book

访问一对应的模型类关联对象的id语法:

#多对应的模型类对象.关联类属性_id
p = Person.objects.get(id=1)
p.book_id

 三、通过模型类实现关联查询

由一模型类条件查询多模型类数据:

语法如下:
关联模型类名小写__属性名__条件运算符=值

如果没有"__运算符"部分,表示等于,结果和sql中的inner join相同

# 查询图书,要求图书中人物的描述包含'宝'。
list = Book.objects.filter(person__name__contains='')

由多模型类条件查询一模型类数据:

语法如下:

一模型类关联属性名__一模型类属性名__条件运算符=值
# 查询书名为“天龙八部”的所有人物。
list = Person.objects.filter(book__title='天龙八部')

 

posted @ 2024-08-20 14:28  未来可期_Durant  阅读(36)  评论(0编辑  收藏  举报