2

我有一个书籍模型

class Book():
  ...
  tags=JSONField()

我有一些记录:

Book(..., tags=['TECH', 'BUSINESS'])
Book(..., tags=['MARKETING'])

我想过滤掉带有“技术”或“商业”标签的书籍

query = Q (
    Q(tags__contains='Tech') |
    Q(tags__contains='Business')
)

我尝试使用 contains、contained_by、has_key、has_any_keys 但没有运气。结果总是空的。

更新

这是我的错!我发现了问题,JSONField 区分大小写。

保存在 DB 中的值["TECH", "BUSINESS"]不是["Tech", "Business"].

现在问题变成了How to search in a case-insensitive manner?

4

2 回答 2

1

可以使用以下命令执行不区分大小写的搜索icontains

query = Q(
    Q(tags__icontains='tech') |
    Q(tags__icontains='business')
)

这是官方文档的链接。

于 2017-10-27T12:26:09.063 回答
0

我已经在 Django-MySQL 存储库中回复了您的问题:https ://github.com/adamchainz/django-mysql/issues/401 。基本上这似乎无法完成,因为 MySQL JSON 值仅区分大小写,根据https://dev.mysql.com/doc/refman/5.7/en/json.html

于 2017-11-05T08:56:00.167 回答