【问题标题】:Query by empty JsonField in django在 django 中通过空 JsonField 查询
【发布时间】:2015-07-08 23:04:35
【问题描述】:

我需要通过JsonField查询模型,我想获取所有具有空值([])的记录:

我使用了MyModel.objects.filter(myjsonfield=[]),但它不起作用,它返回 0 结果虽然有记录有myjsonfield=[]

【问题讨论】:

    标签: python django django-jsonfield


    【解决方案1】:

    为此使用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={})而不是[],但我没有对此进行测试。

    【讨论】:

      【解决方案2】:

      JSONfield 应该是 default={} 即字典,而不是列表。

      【讨论】:

      • 不,不应该。 JSON 可以是根级别的列表或字典。在 Django 中,将其设置为 default={} 不会按进入顺序返回。将其作为列表允许对其进行排序。
      • 两者都可以。 default=dictdefault=list 因为 JSON 可以是字典或列表。不要将其设置为 {} 或 [] 的实际值,也不要实际调用该函数(例如 dict())。将其设置为产生该值的函数的名称。当需要设置默认值时会调用它。
      【解决方案3】:

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

      【讨论】:

      • 同样的,它返回 0 结果
      猜你喜欢
      • 2020-10-08
      • 2018-10-02
      • 2018-10-19
      • 2016-10-28
      • 2022-11-30
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多