Я новичок в django и столкнулся с проблемой.
Это была моя предыдущая модель.
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
Я добавил некоторые данные в эту модель. После этого я добавил к нему еще одно поле. Теперь моя модель выглядит так..
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
age = models.IntegerField()
Когда я выполнил команду python manage.py makemigrations, я получил следующую ошибку, которая очевидна.
You are trying to add a non-nullable field 'age' to blog without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
Я не хочу добавлять дефолт, поэтому я удален содержимое таблицы, обращаясь к db.sqlite3
Но снова после запуска python manage.py makemigrations я получаю ту же ошибку. Почему?






Когда вы добавляете новое поле (то есть столбец) в таблицу базы данных, это поле применяется ко всем строкам в таблице... существующим и любым новым. Если поле не может быть null, то для всех существующих строк необходимо указать какое-то значение.
По умолчанию IntegerField() не может принимать значение NULL. Это объясняет, почему вы получаете предупреждение. У вас есть несколько вариантов:
blank и null в поле вашей модели, чтобы поле могло принимать нулевые значения.Для последнего варианта вы должны сделать это так:
models.IntegerField(blank=True, null=True)
Но это может быть не лучшим выбором в зависимости от вашего варианта использования. Если значения, допускающие значение NULL, не имеют смысла для вашего поля, я бы не стал заставлять поле поддерживать значения NULL.
age = models.IntegerField(null=True)
Поля моделей Django по умолчанию имеют значение null, равное true.
Даже если вы удалили таблицу, любые изменения в вашей модели Django всегда будут ссылаться на предыдущую миграцию этой модели, поэтому вам все равно потребуется установить значение по умолчанию. Если вы все еще находитесь в разработке, вы можете удалить миграции для этой модели, а затем снова выполнить миграции. Но это ужасная практика, и вы никогда не должны делать этого, если вы сознательно не раздавливаете свои модели, лучший способ - сделать то, что говорит вам Джанго, и установить значение по умолчанию. В любом случае это поможет в долгосрочной перспективе с обработкой ошибок.
Другие ответы касаются того, как достаточно хорошо установить значения по умолчанию.
Как вы можете решить это:
Надеюсь, это решит вашу проблему.
Делайте то, что говорит вам Django, затем вы можете удалить атрибут default, если он вам не нужен. Но это хорошая практика, чтобы сохранить его в любом случае
Это не ошибка. Вы пытаетесь добавить поле в базу данных, не допуская, чтобы оно было нулевым и не имело начального значения. Если вам не нужны текущие данные в вашей таблице, выберите вариант 1 и введите
Noneв качестве значения по умолчанию, которое будет установлено на данный момент. Он должен мигрировать без проблем.