【问题标题】:Django - how to filter on a comma seperated stringDjango - 如何过滤逗号分隔的字符串
【发布时间】:2021-09-09 03:56:12
【问题描述】:

在我的 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 对象。

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

【问题讨论】:

  • 也许你的类型应该是它自己的模型,然后可以使用多对多关系
  • 我也想过这个,但目前实现起来相当复杂。我可能想继续使用字符串匹配

标签: django


【解决方案1】:

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

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

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

【讨论】:

  • 好提示。至少那行得通。我完全同意你的建议,建立适当的关系要干净得多。感谢您的快速帮助
猜你喜欢
  • 2021-07-24
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
相关资源
最近更新 更多