我试图在JSONField上应用模型过滤器,但JSON中的键是UUID。
那么什么时候做类似...
MyModel.objects.filter(data__8d8dd642-32cb-48fa-8d71-a7d6668053a7=‘bob’)
...我收到一个编译错误。 UUID中的连字符就是问题所在。
是否有任何线索可以使用转义字符或其他行为?我的数据库是PostgreSQL。
更新1-现在添加了JSON
{
‘8d8dd642-32cb-48fa-8d71-a7d6668053a7’: ’8d8dd642-32cb-48fa-8d71-a7d6668053a7’,
‘9a2678c4-7a49-4851-ab5d-6e7fd6d33d72’: ‘John Smith’,
‘9933ae39-1a27-4477-a9f4-3d1839f93fb4’: ‘Employee’
}
答案 0 :(得分:2)
我在无法使用 __contains
时遇到了同样的问题,我发现您可以使用 **kwargs
解包使其工作,这允许您将过滤器作为字符串 (如果您需要动态过滤器,这也很有用):
kwargs = {
'data__8d8dd642-32cb-48fa-8d71-a7d6668053a7': 'bob'
}
MyModel.objects.filter(**kwargs)
答案 1 :(得分:1)
这看起来很困难,而且我不是100%确信我所拥有的会起作用。
您可以尝试使用JsonField
contains查找。由于HStoreField
的共享功能,因此在文档中对其进行了详细说明。
这看起来像这样:
MyModel.objects.filter(data__contains={'8d8dd642-32cb-48fa-8d71-a7d6668053a7': 'bob'})
我认为这将使您避开查找需要为有效的Python变量名称的事实。