Необходимо ли назначать значение по умолчанию в поле модели?
Как я знаю, в Django требуется, чтобы пользователь определял значение по умолчанию значение по умолчанию для полей модели. Например:
class Student(models.Model):
"""Student info"""
id = models.CharField( max_length=7,primary_key=True,default =-1)
name = models.CharField(_('name'),max_length=8, default="x");
Но меня это очень раздражает. Я просто не знаю, какие значения должны быть присвоены в первую очередь. Пользователь должен принимать решение.
Могу я просто
- Дать None в качестве значения по умолчанию? Какие могут быть последствия? NPE?
- Дать случайное значение.
Является ли специфическим предоставление значения по умолчанию полю модели в Django? Или это общее для большинства MVC веб-фреймворков. Или это связано с учетом базы данных? Спасибо
вы можете установить null=True, blank=True, если вы не хотите, чтобы это поле было обязательным.
null=True и blank=True - это две разные вещи, и их не следует смешивать.
Чтобы не иметь поля по умолчанию в атрибуте вашей модели, вам просто нужно null=True, что в основном означает "Я не против того, чтобы этот столбец хранил нулевые значения".
blank=True означает, что когда этот атрибут появляется в ModelForm, соответствующее поле будет отображаться как required. В основном это касается валидации формы.
Это может показаться крайним случаем, тем более что многие люди предпочитают писать свои собственные формы, а не использовать Django ModelForm, но знаете, что еще использует ModelForm? Админка django.
Да, поэтому если вы не хотите, чтобы это поле required также было в админке django, то вам следует добавить blank=True в атрибут вашей модели.
Но наличие blank=True не влияет на то, нужно или нет значение по умолчанию.
Если поля не являются обязательными (могут быть пустыми), то вы можете сделать их нулевыми, используя null=True. Обратите внимание, что для полей типа char лучше использовать blank=True вместо этого.
Что касается второй вещи, о которой вы упомянули, можно передать вызываемую функцию в поле модели в качестве значения по умолчанию. Так, вы можете написать функцию, которая генерирует случайные значения, и передать ее в качестве значения по умолчанию для поля.