gpt4 book ai didi

python - Django 管理员 : JSONField default empty dict wont save in admin

转载 作者:行者123 更新时间:2023-12-04 15:29:12 25 4
gpt4 key购买 nike

在我的模型定义中,我有

from django.contrib.postgres.fields import JSONField
.....
.......
.........

media_data=JSONField(default=dict)

我创建了一个默认管理员

当我尝试在不触及该字段的情况下进行保存时,我收到 this field is required错误。

field is required

它看起来像一个表单验证问题,因为我可以以编程方式从代码中保存模型实例而不会出现问题。

为什么会这样?
我错过了一些愚蠢的事情吗?

最佳答案

  • 发生了什么。
    当深入研究源代码时。我们可以看到如下调用栈:
  •     1) form.is_valid() 
    ->form.full_clean()
    -->form._clean_fields()
    ---> self.cleand_data[name] = field.clean(value)
    2) field.clean(value)
    -> self.to_python(value)
    -> self.validate(value)

    查看源代码,你会发现,主要是因为 empty_values查看。
    # These values, if given to validate(), will trigger the self.required check.
    EMPTY_VALUES = (None, '', [], (), {})

    正如你所看到的空字典 {}作为 JSONField 的空值。所以它会引发错误。
  • 我们可以做什么?
    解决方案是自定义 models.JSONField 和 forms.JSONField,如下所示。

  • 表格.py

    from django.contrib.postgres import forms

    class MyJSONField(forms.JSONField):
    empty_values = [None, "", [], ()]

    数据库/字段.py

    class MyJSONField(JSONField):
    def formfield(self, **kwargs):
    from ..forms import MyJSONField

    return super().formfield(**{"form_class": MyJSONField, **kwargs})

    关于python - Django 管理员 : JSONField default empty dict wont save in admin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55147169/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com