Я хочу создать поле модели Django (IntegerField) со значением по умолчанию, а также создать форму, полученную из модели, где поле является необязательным. Если он не установлен в форме, тогда, когда я сохраняю форму, я хочу, чтобы значение по умолчанию было сохранено в БД.
# model.py
class Invoice(models.Model):
# IntegrityError "Column 'expireDays' cannot be null"
expireDays = models.PositiveSmallIntegerField(default=1)
# expireDays = *null* in DB
expireDays = models.PositiveSmallIntegerField(default=1, blank=True, null=True)
# forms.py
class InvoiceForm(forms.ModelForm):
# leaving this line out gives invalid form
expireDays = forms.IntegerField(required=False)
class Meta:
model = Invoice
(Я использовал только одну из строк объявления поля за раз.:)
Я даже не уверен, что правильно объявляю значение по умолчанию. Единственная ссылка, которую я мог найти, была в статье о обработке вариантов Джеймсом Беннеттом. Я еще не нашел его в документах Django (я использую версию 1.2 - возможно, это в 1.3?)
Обновление - я попробовал установить значение по умолчанию для поля в базе данных MySql, чтобы не повлиять. Кажется, что даже если форма не имеет значения для поля, она идет вперед и присваивает значение null БД, превышая значение по умолчанию MySql.
Хотя в настоящее время я просто устанавливаю значение по умолчанию в представлении, которое создает форму - мне это не очень нравится, поскольку он несет ответственность за целостность поля в представлении, а не за БД.
Как я мог подумать, что это сработает, это то, что поле может быть установлено или нет в форме - если установлено, это значение будет записано в БД, а если не установлено, то по умолчанию DB будет используемый. Вместо этого, если не задано, форма записывает нуль в БД. Итак, какой смысл иметь значение по умолчанию в объявлении ModelField, если оно не используется? Что именно он делает?