2017-04-11 127 views
1

我需要做同样的事情:Django的JSONField和Q对象

# models.py 
from django.contrib.postgres.fields import JSONField, 

class MyModel(): 
    *** 
    ** 
    admin_fields = JSONField(_('admin fields'), blank=True, null=True, help_text=admin_fields_help_text) 


my_instances = MyModel.objects.filter((Q(my_model_id=pk) & 
     Q(children__isnull=True)) & 
     ~Q(admin_fields__status__contains='deleted')) 

或者

得到的所有记录与id=pkchildren__isnull=True和JSONField admin_fields不得含有status==deleted

目前 admin_fields = {'status':'deleted'}

相反,它只返回r ecord有

admin_fields = {'status': 'deleted'} 

Is〜Q()不能与JSONField一起工作吗?

想法?

感谢,

d

+0

你试过'MyModel.objects.filter((Q(my_model_id = PK) Q(children__isnull = TRUE)))。exlude(admin_fields__status__contains = '删除')'?或者试试下面的MyModel.objects.filter(my_model_id = pk,children__isnull = True).exlude(admin_fields__status__contains ='deleted')' – Algorithmatic

+0

谢谢,我没有想到绝对。它适用于一个小的变化:'MyModel.objects.filter(my_model_id = pk,children__isnull = True).exclude(admin_fields__contains = {'status':'deleted'})'。请添加它作为答案。 – Daviddd

回答

1

你可以做你打算使用exclude()方法做什么。

MyModel.objects.filter(my_model_id=pk, children__isnull=True).exclude(admin_fields__contains={'stat‌​us': 'deleted'})