在我的 Django models.py 中,我有一个“流派”字段(models.TextField)。该字段有时只包含一个字符串,有时包含一个逗号分隔的字符串列表,如下所示:
Comedy, Action, Drama
或者
Action, Fantasy
或者如上所述,只有一个字符串,例如仅
Comedy
现在我认为我想做这样的事情:
queryset_comedy = Movies.objects.get_queryset().filter(genre__in=["Comedy", "Family"])
queryset_action = Movies.objects.get_queryset().filter(genre__in=["Action", "Adventure"])
queryset_drama = Movies.objects.get_queryset().filter(genre__in=["Drama", "Thriller"])
我提到我的查询仅匹配根据流派字段独立的字段值。例如,电影元素一具有以下流派字符串:
喜剧、 Action
而电影元素二仅将“Comedy”作为独立字符串。该查询仅输出具有独立字符串“Comedy”的 Movie 对象,而不输出 Comedy、Action。
当为流派提供多个排序字符串时,如何使电影元素匹配?
最佳答案
作为直接解决方案,您可以将多个 contains
查询一起进行OR
。即
queryset_comedy = Movies.objects.filter(Q(genre__contains="Comedy") | Q(genre__contains="Family"))
但是,例如,我建议迁移到更合适的表示形式
- 使用ArrayField (特定于 PostgreSQL)
- 将字符串列表存储在 JSONField 中
- 将类型存储在另一个表中,并使用 ManyToManyField 将其与
电影
关联起来。
关于Django - 如何过滤逗号分隔的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68136346/