Django - 如何过滤逗号分隔的字符串

时间:2021-06-25 19:40:12

标签: django

在我的 Django models.py 中,我有一个“流派”字段 (models.TextField)。这个字段有时只包含一个字符串,有时包含一个逗号分隔的字符串列表,如下所示:

<块引用>

喜剧、动作、剧情

<块引用>

动作、奇幻

或如上所述只有一个字符串,例如只有

<块引用>

喜剧

现在我认为我想做这样的事情:

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"])

我提到我的查询仅匹配根据流派字段独立的字段值。例如,电影元素一具有以下类型字符串:

喜剧、动作

和电影元素二只有“喜剧”作为独立字符串。比查询仅输出具有独立字符串“Comedy”而不是 Comedy, Action 的 Movie 对象。

当为流派提供多个排序字符串时,如何使 Movie 元素匹配?

1 个答案:

答案 0 :(得分:1)

作为一种直接的解决方案,您可以将 OR 多个 contains 查询放在一起。即

queryset_comedy = Movies.objects.filter(Q(genre__contains="Comedy") | Q(genre__contains="Family"))

但是,我建议迁移到更合适的表示,例如

  • 使用 ArrayField(特定于 PostgreSQL)
  • JSONField 中存储字符串列表
  • 将流派存储在另一个表中并使用 ManyToManyField 将其与 Movies 相关联
相关问题