[英]Filter Django queryset for a dict value
我有一個包含dict
JSONField
attributes
的Products
JSONField
class Product(models.Model):
attributes = JSONField(
pgettext_lazy('Product field', 'attributes'),
encoder=DjangoJSONEncoder, default={})
我想過濾Products
,其中attributes['12'] == '31'
以下一件作品:
qs.filter(attributes__contains={'12': '31'})
以下一項沒有:
qs.filter(attributes__12='31')
這是我可以通過PostgreSQL
實現的功能還是應該將其移至ES?
編輯: 不幸的是我不能使用第一個解決方案,因為此 dict
可能包含更多的鍵。
第一種解決方案效果很好。 鑒於我們有:
product.attributes = {'333': ['6', '1']}
我們可以通過以下方式過濾掉它:
Product.objects.filter(attributes__contains={'333': ['6']}
等。完全忽略了它。
您應該能夠使用第二種格式,即qs.filter(attributes__key='value')
。
如本文檔所述 ,您在這種情況下的問題是,當在JSON查詢中使用整數作為鍵時,該鍵將用作數組的索引,因此將其解釋為attributes[12]
而不是attributes['12']
。
只要您堅持使用字符串鍵,就可以了。
一個例子:
class MyModel(models.Model)
json = JSONField(default=dict)
p = MyModel.objects.create(json={'0': 'something', 'a': 'something else'})
MyModel.objects.filter(json__0='something') # returns empty queryset
MyModel.objects.filter(json__a='something else') # returns the object created above
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.