2016-12-06 4 views
2

У меня есть поле «адрес» в моей модели Django, что я хочу быть необязательными:Confused о том, как сделать Django модель поле опционального

class Home(models.Model): 
    address = models.CharField(max_length=256, blank=True, default=None) 
    city = models.CharField(max_length=25) 

Я хочу, чтобы это было дополнительное поле в моей базе данных, но я не установил «null = True», потому что documentation говорит

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

Однако, когда я создаю объект Home с помощью этой команды:

Home.objects.create(city='Chicago') 

Я получаю сообщение об ошибке:

IntegrityError: null value in column 'address' violates not-null constraint. 

не Должен ли я добавить "нуль = True" в поле адреса, несмотря на что говорят документы, чтобы сделать его необязательным? Если нет, как его следует объявить, чтобы я мог создавать новые объекты Home без повышения этой ошибки?

+0

Может вы хотите установить значение по умолчанию? https://docs.djangoproject.com/ru/1.10/ref/models/fields/#default –

+0

Также см. Ответы на этот вопрос. http://stackoverflow.com/questions/755857/default-value-for-field-in-django-model –

+0

Я сделал. Он установлен на «Нет». Я что-то упускаю? – William

ответ

0

если вы не всегда добавить адрес вам нужно добавить

null= True 

потому, что по умолчанию установлено значение None, кроме ISN DB» t установить для принятия null

+0

Я не понимаю, почему в документации говорится, что она делает, не обращаясь к этой проблеме Я просто собираюсь установить «null = True», как обычно. – William

5

Вы должны избавиться от default=None, в противном случае, вы можете просто использовать default=''

+0

Я думаю, что это лучший способ сделать это, потому что он согласуется с тем, как Django представляет пустой CharFields. – souldeux

+0

Когда я делаю это изменение и изучаю мою таблицу таблиц базы данных PostgreSQL, он по-прежнему говорит, что поле адреса «не равно нулю». – William

+0

Запустили ли вы 'manage.py makemigrations' и 'manage.py migrate'? – Hybrid

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