[英]Django - get objects by related_query_name
I have the following Model at my models.py to store genre information for specific objects at my Database like Movies for example:我的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"))
At my Movies model class I have the following field to connect the two models with each other:在我的电影模型类中,我有以下字段可以将两个模型相互连接:
genre_relation = GenericRelation(Genre, related_query_name='genre_relation')
At my views.py I now want to query onto specific Movies of genre "Comendy" and "Family" for example, but I don't get back any results:例如,在我的 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')
Can smb.可以help?帮助?
Rather than a GenericRelation you should use a through table .您应该使用直通表而不是 GenericRelation。 This is a separate model with a foreign key to both Movie and Genre and each record forms a relation.这是一个单独的模型,具有指向 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)
You can then access the movies belonging to a genre with:然后,您可以通过以下方式访问属于某个类型的电影:
movie.genre.all()
And all the genres belonging to a move with:以及属于一个动作的所有流派:
genre.movie_set.all()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.