django中的联表查询
时间: 2023-11-13 18:04:16 浏览: 91
在 Django 中,联表查询通常使用 ForeignKey 和 ManyToManyField 字段来创建模型之间的关系。这些字段允许您在不同的模型之间建立关系,并在查询时使用这些关系。以下是一些常见的联表查询技巧:
1. 基于关联模型的属性进行查询
您可以使用双下划线语法来查询关联模型的属性,例如:
```python
# 查询 Book 对象中所有作者姓为 'Smith' 的书籍
Book.objects.filter(authors__last_name='Smith')
```
2. 多级关联查询
如果您的模型之间存在多个关联关系,您可以使用多个双下划线语法来进行多级关联查询,例如:
```python
# 查询 Book 对象中所有出版社位于 'New York' 的作者的名字
Author.objects.filter(book__publisher__city='New York').values_list('name', flat=True)
```
3. 反向关联查询
您可以使用反向关联查询来访问关联模型中的数据,例如:
```python
# 查询 Author 对象中所有写的书籍的出版社
Publisher.objects.filter(book__authors__name='John Doe').distinct()
```
4. 聚合查询
您可以使用聚合函数来对查询结果进行聚合计算,例如:
```python
# 统计 Book 对象中每个出版社出版的书籍数量
from django.db.models import Count
Book.objects.values('publisher').annotate(num_books=Count('id'))
```
以上是一些常见的 Django 联表查询技巧,希望对您有所帮助。
阅读全文