python - Django 如何过滤模型实例以及每个实例的相关对象。嵌套过滤?
问题描述
我有三个模型,流派、电影和评论。每个流派可以有多部电影,每部电影可以有多个评论。我一直在尝试过滤 Genre 实例的相关对象,以便查询集仅包含活动电影,并且每个活动电影仅包含活动评论。
模型.py
class Genre(models.Model):
name = models.CharField(max_length=160)
class Movie(models.Model):
genre = models.ForeignKey(Genre, null=True, on_delete=models.CASCADE, related_name='movies')
title = models.CharField(max_length=160)
active = models.BooleanField(default=True)
class Review(models.Model):
movie = models.ForeignKey(Movie, null=True, on_delete=models.CASCADE, related_name='reviews')
author = models.CharField(max_length=150)
active = models.BooleanField(default=True)
如何从仅包含活动电影和评论的流派实例中获取查询集?感谢您的时间!
编辑: 我的目标是使用这个查询集来检索每个活动电影,然后对于每个活动电影,检索每个活动评论。因此,我正在寻找一种提供查询集的解决方案,该查询集可以很容易地按照活动电影的顺序进行迭代,然后是活动评论。
解决方案
您可以.filter(…)
[Django-doc]使用:
Review.objects.filter(active=True, movie__active=True, movie__genre=genre1)
可以使用双下划线 ( __
) 来“透视”关系。
如果您想检索Movie
s 并且只检索活动评论,我们可以使用一个Prefetch
对象:
from django.db.models import Prefetch
Movie.objects.filter(active=True, genre=genre1).prefetch_related(
Prefetch(
'reviews',
queryset=Review.objects.filter(active=True),
to_attr='active_reviews'
)
)
Movie
来自这个查询集的s 将有一个属性.active_review
s,它只包含活跃的评论。
推荐阅读
- javascript - 用 JavaScript 修剪空白行
- sql-server - 需要 SSIS 表达式帮助以在文件名中查找关键字
- c++ - 如何从while循环中仅显示文本文件的一个读数
- mysql - SQL - 确保一列在多行中是唯一的?
- redis - 开启混合RDB+AOF后,可以关闭RDB持久化吗?
- docker - 在 Azure 门户内的 Ubuntu Linux 中构建、部署 Docker 容器
- microsoft-graph-api - Microsoft Graph API - 如何在共享邮箱中创建事件订阅
- python - 我不断收到keyerror,但我已经在外面测试过它并且它有效
- marklogic - 光学查询中的最后一天
- javascript - 如何使用 JSObject - iframe 中的 Flutter 上下文调用自定义 JavaScript 函数?