微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django - 通过 related_query_name 获取对象

如何解决Django - 通过 related_query_name 获取对象

我的 models.py 中有以下模型,用于在我的数据库中存储特定对象的类型信息,例如电影:

class Genre(models.Model):
    objects = RandomManager()
    id = models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False)
    content_type = models.ForeignKey(ContentType,limit_choices_to=referential_genre_models,on_delete=models.CASCADE,verbose_name=_("Content Type"))
    object_id = models.CharField(max_length=36,verbose_name=_("Object ID"))
    content_object = GenericForeignKey('content_type','object_id')
    name = models.CharField(verbose_name=_("Genre"),blank=True,null=True,editable=False,max_length=50)
    date_added = models.DateTimeField(auto_Now_add=True,verbose_name=_("Date Added"))

在我的电影模型类中,我有以下字段可以将两个模型相互连接:

genre_relation = GenericRelation(Genre,related_query_name='genre_relation')

在我的 views.py 中,我现在想查询类型为“Comendy”和“Family”的特定电影,但我没有得到任何结果:

movie_genre_assets = Movies.objects.get_queryset().filter(Q(genre_relation__name="Comedy") | Q(genre_relation__name="Family")).order_by('release_date')

可以。帮助?

解决方法

您应该使用 through table 而不是 GenericRelation。这是一个单独的模型,带有指向 Movie 和 Genre 的外键,每个记录形成一个关系。

class Movie(models.Model):
    genre = models.ManyToManyField(through="MovieGenre")
    ...

class Genre(models.Model):
    ...

class MovieGenre(models.Model):
    movie = models.ForeignKey(Movie,on_delete=models.CASCADE)
    genre = models.ForeignKey(Genre,on_delete=models.CASCADE)

然后,您可以通过以下方式访问属于某个类型的电影:

movie.genre.all()

以及属于一个动作的所有流派:

genre.movie_set.all()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。