簡體   English   中英

通過django中的空JsonField查詢

[英]Query by empty JsonField in django

我需要通過 JsonField 查詢JsonField ,我想獲取所有具有空值 ([]) 的記錄:

我使用MyModel.objects.filter(myjsonfield=[])但它不起作用,它返回 0 結果,盡管有myjsonfield=[]的記錄

為此使用 dunder __exact __isnull=True不起作用,因為 JSONField 在技術上不為空。

其中myjsonfield為空的 MyModel 條目:

MyModel.objects.include(myjsonfield__exact=[])

其中myjsonfield不為空的 MyModel 條目:

MyModel.objects.exclude(myjsonfield__exact=[])

https://docs.djangoproject.com/en/3.1/ref/models/querysets/#std:fieldlookup-exact

我相信如果你在你的模型中設置了default=dict那么你應該使用{} (例如: myjsonfield__exact={} )而不是[]但我沒有測試過這個。

JSONfield 應該是default={}即字典,而不是列表。

  1. 首先,Django 實際上建議您使用不可變/可調用的默認值聲明 JSONField。 對於你的例子:

     class MyModel(models.Model): myjsonfield = models.JSONField(null=True, default=list)
  2. 其次,通過null JSONField查詢:

     MyModel.objects.filter(myjsonfield__isnull=True)

    要查詢具有default值的字段(在您的情況下為[] ):

     MyModel.objects.filter(myjsonfield__exact=[])

有關詳細信息和示例,請參閱https://docs.djangoproject.com/en/4.0/topics/db/queries/#querying-jsonfield

試試MyModel.objects.filter(myjsonfield='[]')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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