对于项目,我正在使用Python 3.6.3,Django 2.0和Postgre 9.4。在我的班票中,有一个JSONField乘客
passenger = JSONField(blank=True)
Run Code Online (Sandbox Code Playgroud)
我的乘客JSON如下所示:
{
"email": null,
"mobile": "21312",
"passport": "2141241",
"sms_sent": false,
"full_name": "something"
},
{
"email": null,
"mobile": null,
"passport": "1231231",
"sms_sent": false,
"full_name": "Irfan"
},
{
"email": null,
"mobile": null,
"passport": "1231231",
"sms_sent": true,
"full_name": "Irfan"
}
Run Code Online (Sandbox Code Playgroud)
现在,我有了django命令,我要在其中过滤具有非null或None且mobile的票证且sms_sent为False的票证。
tickets = Ticket.objects.filter(
date=tomorrow, trip__bus_company=bus_company,
passenger__sms_sent=False
).not_cancelled()
Run Code Online (Sandbox Code Playgroud)
现在passenger__sms_sent = False过滤器正在运行,并且正在提供我仅有的sms_sent = False的票证。但是passenger__mobile过滤器不起作用。我尝试了每个人:
tickets = tickets.exclude(passenger__mobile=None)
tickets = tickets.exclude(passenger__mobile=None).exclude(passenger__mobile='')
tickets = tickets.exclude(passenger__mobile__isnull=True)
tickets = tickets.exclude(passenger__exact={'mobile': None})
tickets = tickets.exclude(passenger__mobile__isnull=True).exclude(passenger__mobile='')
tickets = tickets.exclude(passenger__mobile__isnull=False).exclude(passenger__mobile='')
tickets = tickets.exclude(Q(passenger__mobile__isnull=True) | …Run Code Online (Sandbox Code Playgroud)