python - 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 中,我想查询特定类型的“喜剧”和“家庭”电影,但我没有得到任何结果:
movie_genre_assets = Movies.objects.get_queryset().filter(Q(genre_relation__name="Comedy") | Q(genre_relation__name="Family")).order_by('release_date')
能 帮助?
解决方案
而不是 GenericRelation 您应该使用through table。这是一个单独的模型,具有 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()
推荐阅读
- firebase - 带有 FireStore 的 Flutter 聊天模块
- excel - 如何使用 VBA 和选择器将此网站的内容转换为 Excel?
- postgresql - 使用气流的 postgres 数据库获取应用程序数据
- numpy - 迭代数组列并垂直堆叠它们的最快方法
- reactjs - 在 React-css 中,Bootstrap 影响另一个类组件
- docker - docker run dynamodb-local on Github Actions Workflow 挂起
- netbeans - 从 Ant 切换到 Maven 时 Netbeans 中的问题
- python - Pyspark - 如何根据两条线的差异创建新线
- java - 无法从android客户端连接到在windows上运行的python服务器
- python - 如何在我的 Pandas 数据框中合并绝对值?