Django JSONField 不保存 0 值

Posted

技术标签:

【中文标题】Django JSONField 不保存 0 值【英文标题】:Django JSONField does not save 0 value 【发布时间】:2019-08-31 13:05:11 【问题描述】:

我的模型中有一个 JSONField,当我尝试在 django 管理页面的 json 中将 0 保存为值时,它会将值保存为 null。如何将零保存为值? Django 版本:2.1.7

Django 管理页面:

我的 JSON 字段:

lecturer_scores = JSONField(
        verbose_name=_("Lecturer Score"),
        validators=[validate_lecturer_score],
        default=dict,
        blank=True
    )

我的意见:


"score 1": 0,
"score 2": 5

它保存如下:


"score 1": null,
"score 2": 5

验证器:

from django.core.validators import validate_integer
from django.core.exceptions import ValidationError

def validate_lecturer_score(value):
    for k, v in value.items():
        if v:
            validate_integer(v)
    for value in value.values():
        if value:
            if value < 0 or value > 100:
                raise ValidationError(_("Lecturer score for user's participance rate calculation should be between 0 and 100."))

【问题讨论】:

你的validate_lecturer_score 是什么我复制了你的代码,除了验证器。并且该字段保存为0 而不是null 你的数据库是什么?我无法使用 postgres 重现它imgur.com/a/ETBZVHF 我的数据库是PostgreSQL @BearBrown 问题出现在我的信号中,我调用了一个属性方法并设置了值。我检查值是否为空,将其设置为空。像这样lecturer_scores[key] = self.lecturer_scores.get(key) or None 请为其他将搜索相同问题的人写下答案。 【参考方案1】:

问题出在我的信号中,我调用了一个属性方法并设置了值。我检查值是否为空,将其设置为空。像这样lecturer_scores[key] = self.lecturer_scores.get(key) or None

【讨论】:

以上是关于Django JSONField 不保存 0 值的主要内容,如果未能解决你的问题,请参考以下文章

text jsonfield django json场没有保存

Django save request.POST to JSONField 从列表中选择最后一项而不是保存列表

Django 查询集过滤空 JSONField

带有默认和自定义编码器的 Django JSONField

django postgresql json 字段模式验证

Django JSONField isnull 查找