【问题标题】:Set Django JSONField value to a JSON null singleton with the Django ORM使用 Django ORM 将 Django JSONField 值设置为 JSON 空单例
【发布时间】:2020-10-09 09:13:47
【问题描述】:

在 PostgreSQL 上使用 Django JSONField,假设我有以下模型

class Foo(models.Model):
    bar = models.JSONField(null=False)

我想设置一行以具有 bar=null,其中 null 是单个 JSON 空值(不同于数据库 NULL 值)。


我可以通过原始 SQL 查询来实现它:

UPDATE "myapp_foo"
SET "bar" = 'null'::jsonb
WHERE "myapp_foo"."id" = <relevant_id>

我在 ORM 中能做的最接近的事情是

Foo.objects.filter(id=<relevant_id>).update(bar=None)

但 Django 将其解释为数据库 NULL,我收到以下错误:

null value in column "bar" violates not-null constraint

Foo.objects.filter(id=<relevant_id>).update(bar="null")

但 Django(正确)将此解释为 JSON 字符串 "null"


我是否遗漏了什么,或者这是 ORM 功能中的一个差距?

【问题讨论】:

    标签: python json django postgresql


    【解决方案1】:

    我发现这可以通过 Django Value 类来完成。

    from django.db.models import Value
    
    Foo.objects.filter(id=<relevant_id>).update(bar=Value("null"))
    

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 2018-01-18
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 2018-10-27
      • 2011-12-05
      相关资源
      最近更新 更多