Ошибка Django при попытке перенести модели с foreignkeys, для которых не установлено null=True или default

У меня есть модель, представляющая собой пост, как в Twitter, у которого есть создатель. В идеале я бы хотел, чтобы пост всегда требовал creator_id и если создатель удаляется, то удалялся и пост

class Post(AbstractBaseModel):
    creator_id = models.ForeignKey(User, on_delete=models.CASCADE, related_name="post_creator_id")
    body = models.CharField(max_length=511)

Всякий раз, когда я пытаюсь запустить 'python manage.py migrate', я получаю эту ошибку

"Вы пытаетесь изменить nullable поле 'creator_id' на cheerpost на non-nullable без значения по умолчанию; мы не можем этого сделать (базе данных нужно что-то для заполнения существующих строк)"

Варианты решения этой проблемы следующие: 1) предоставить одноразовое значение по умолчанию или 2) игнорировать на данный момент. Ни один из этих вариантов не соответствует моему ограничению, которое я хочу применить, а именно: creator_id должен существовать и быть тем человеком, который создал сообщение, иначе объект будет удален.

Django просит вас предоставить одноразовое значение по умолчанию для всех строк, которые уже есть в вашей базе данных, поскольку поле было nullable до миграции. Проблема в том, что Django не знает, есть ли в существующей базе данных строки, в которых этот столбец является нулевым, поэтому ему нужны инструкции, что делать, если он их найдет. Вы можете просто предоставить такую инструкцию и забыть о ней - она никогда больше не будет использоваться после завершения миграции.

Кроме того, возможно, вы захотите просмотреть, как работает параметр related_name; вы поняли его наоборот.

Если вы удалили БД, удаляются только данные и таблицы из БД.

Это не отражает никаких изменений в Django. Все изменения, которые вы внесли в поля вашей модели, по-прежнему существуют в миграциях. Вы должны удалить старые миграции тоже.

Удалите старые миграции из приложения, создайте новые миграции с нуля и примените их.

python manage.py makemigrations

python manage.py migrate
Вернуться на верх