Во-первых, пустое значение (пустая строка) НЕ совпадает с нулевым ('' != None
).
Во-вторых, Django CharField при использовании через формы будет хранить пустую строку при выходе из поляпусто.
Так что, если ваше поле было чем-то иным, чем CharField, вы должны просто добавить null=True
к нему. Но в этом случае вам нужно сделать больше, чем это.Вам нужно создать подкласс forms.CharField
и переопределить его метод clean
, чтобы он возвращал None в пустой строке, что-то вроде этого:
class NullCharField(forms.CharField):
def clean(self, value):
value = super(NullCharField, self).clean(value)
if value in forms.fields.EMPTY_VALUES:
return None
return value
, а затем использовать его в форме для вашей ModelForm:
class MyModelForm(forms.ModelForm):
name = NullCharField(required=False, ...)
таким образом, если вы оставите это поле пустым, в базе данных будет храниться ноль вместо пустой строки (''
)