2015-08-17 3 views
0

У меня есть модель с этим полем ...Django ModelForm не разрешает нулевое значение для требуемого поля?

fulfillment_flag = models.CharField(pgettext_lazy('Delivery group field', 'Fulfillment Flag'), max_length=255, 
             null=True, choices=FULFILLMENT_FLAG_CHOICES) 

А вот моя форма ...

class FulfillmentFlagForm(forms.ModelForm): 

    class Meta: 
     model = DeliveryGroup 
     fields = ['fulfillment_flag', ] 

    def clean_fulfillment_flag(self): 
     return self.cleaned_data['fulfillment_flag'] or None 

У меня есть HTML выберите раскрывающийся, который имеет пустое значение параметра в верхней , Каждый раз, когда я выбираю пустой параметр и нажимаю «Сохранить», форма не сохраняет его как значение «Нуль» в моей модели. Он сохранит любой из других полей, хотя и не пустой. И это скажет мне, что поле также необходимо.

Как я могу указать форму, чтобы сохранить пустое значение как Null?

ответ

2

https://docs.djangoproject.com/en/1.8/ref/models/fields/#null

Избегайте использования нуль на струнных основе таких областях, как CharField и TextField, так как пустые строковые значения всегда будут сохранены как пустые строки, а не NULL. Если в строковом поле есть null = True, это означает, что у него есть два возможных значения для «no data»: NULL и пустая строка. В большинстве случаев избыточно иметь два возможных значения для «нет данных», соглашение Django - использовать пустую строку, а не NULL.

Для строковых и нестроковых полей вам также необходимо установить blank = True, если вы хотите разрешить пустые значения в формах, поскольку нулевой параметр влияет только на хранилище базы данных (см. Пробел).

ли blank=True вместо этого и сохранить "" вместо None.

+0

'blank = True' является единственной строго обязательной частью - это то, что контролирует, требуется ли это поле или нет. Но рекомендация не использовать 'null' для' CharField' стоит того. –

+0

Какое поле формы рекомендуется использовать в моей ситуации? – Chad

+0

Все поля принимают пустые/без ввода, если вы им так говорите. Вы можете либо указать их, указав в форме «required = False», либо произнеся «blank = True» в модели. Выполнение последнего позволит вам использовать «ModelForm» и предотвращает повторный код. –

Смежные вопросы