- Что происходит.
когда погрузитесь в исходный код. мы можем увидеть следующий стек вызовов:
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, '', [], (), {})
как видите, пустой dict {}
как пустое значение для JSONField. так что это вызовет ошибку.
- Что мы можем сделать?
Решением было бы настроить модели .JSONField и forms.JSONField, как показано ниже.
forms.py
from django.contrib.postgres import forms
class MyJSONField(forms.JSONField):
empty_values = [None, "", [], ()]
дб / fields.py
class MyJSONField(JSONField):
def formfield(self, **kwargs):
from ..forms import MyJSONField
return super().formfield(**{"form_class": MyJSONField, **kwargs})