列出的jsonfield上的django过滤器返回确切的列表对象

时间:2019-11-22 15:10:22

标签: django django-models django-rest-framework django-forms django-templates

我们有一个postgres JSONField

class Demo_Model(models.Model):
    urls_results = JSONField(blank=True,null=True,default=dict)
from mainapp.models import Demo_Model
j1 = [{"name":"John","age":"15"},{"name":"cena","age":"21"}]
j2 = [{"name":"Shawn","age":"9"},{"name":"Michale","age":"19"}]
Demo_Model(urls_results=j1).save()
Demo_Model(urls_results=j2).save()
  • 现在,我们已将JSON数据插入到Demo_Model的2个对象中,

当我们根据urls_results字段的json数据的键和值筛选出结果时。

>>> x = Demo_Model.objects.filter(urls_results__contains=[{"name":"cena"}])
>>> x
<QuerySet [<Demo_Model: Demo_Model object (1)>]>
>>> for eachx in x:
...     print(eachx.urls_results)
...
[{'age': '15', 'name': 'John'}, {'age': '21', 'name': 'cena'}]
  • 它根据键和值进行过滤并返回匹配的对象。如何从结果列表中过滤匹配的json部分,而不是整个字段。

从这

[{'age': '15', 'name': 'John'}, {'age': '21', 'name': 'cena'}]

仅需匹配DICT的对象部分

{'age': '21', 'name': 'cena'}
  • 我知道我们可以在结果对象之间运行一个for循环以匹配并返回。
 for eachx in x:
    for key,val in eachx.items():
         if key == 'name' & val == 'cena':
            return eachx
  • 但是当我们有大量urls_results时,这是一个问题,我正在寻找另一种方法,而不是四处循环,

解决此问题的最有效/快速方法是什么?

0 个答案:

没有答案