我有三个模型:类型、电影和评论。每种类型可以有多部电影,每部电影可以有多个评论。我一直在尝试过滤 Genre 实例的相关对象,以便查询集仅包含事件电影,并且每个事件电影仅包含事件评论。
models.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)
如何从仅包含事件电影和评论的 Genre 实例获取查询集?感谢您的宝贵时间!
编辑: 我的目标是使用此查询集来检索每个事件电影,然后对于每个事件电影,检索每个事件评论。因此,我正在寻找一种解决方案,该解决方案提供一个查询集,可以轻松地按照首先活跃电影,然后活跃评论的顺序进行迭代。
最佳答案
Review.objects.filter(<b>active=True, movie__active=True, movie__genre=genre1</b>)
可以使用双下划线 (__
) 来“查看”关系。
如果您想检索电影
并且仅检索有效评论,我们可以使用Prefetch
对象:
from django.db.models import Prefetch
Movie.objects.filter(<b>active=True, genre=genre1</b>).prefetch_related(
Prefetch(
'reviews',
queryset=Review.objects.filter(active=True),
to_attr='active_reviews'
)
)
从此查询集中产生的Movie
将具有一个属性.active_review
,该属性仅包含有效的评论。
关于python - Django 如何过滤模型实例以及每个实例的相关对象。嵌套过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68339030/