簡體   English   中英

篩選Django queryset以獲取dict值

[英]Filter Django queryset for a dict value

我有一個包含dict JSONField attributesProducts 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM