python - Django 如何过滤模型实例以及每个实例的相关对象。嵌套过滤?

标签 python django

我有三个模型:类型、电影和评论。每种类型可以有多部电影,每部电影可以有多个评论。我一直在尝试过滤 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 实例获取查询集?感谢您的宝贵时间!

编辑: 我的目标是使用此查询集来检索每个事件电影,然后对于每个事件电影,检索每个事件评论。因此,我正在寻找一种解决方案,该解决方案提供一个查询集,可以轻松地按照首先活跃电影,然后活跃评论的顺序进行迭代。

最佳答案

您可以.filter(…) [Django-doc]与:

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/

相关文章:

Python pip 安装失败,错误代码为 1

python - 如何显示集合中的用户名而不是 flask 中的用户名?

python - 从文件中读取特定的单词和值并将它们存储在字典中

python - django shell、django Rest Framework 序列化器和 cassandra 中的内存泄漏

django - 使用 django allauth 在索引页面上登录和注册

python - 获取用户角色并将其添加到 jwt 负载中

python - Django 1.7 makemigrations - ValueError : Cannot serialize function: lambda

将数据库从 sqlite 更改为 mysql 时,Python manage.py 迁移错误

python - 从 python 命令行退出

python - Pandas :将一个数据框的特定列连接到另一个数据框