Это потому, что вы упускаете on_delete в ForeignKey, это обязательно в новой версии Django.
Добавьте следующее on_delete в соответствии с вашим приложением, внесите изменения и повторите миграцию.Тогда все должно быть в порядке.
Из документа: https://docs.djangoproject.com/en/2.2/ref/models/fields/#arguments
ForeignKey принимает другие аргументы, определяющие детали работы отношения.
ForeignKey.on_delete
Когда объект, на который ссылается ForeignKey, удаляется, Django будет эмулировать поведение ограничения SQL, заданного аргументом on_delete.Например, если у вас есть Nullable ForeignKey и вы хотите, чтобы он был установлен равным NULL при удалении ссылочного объекта:
user = models.ForeignKey(
User,
models.SET_NULL,
blank=True,
null=True,
)
on_delete не создает ограничение SQL в базе данных.Поддержка параметров каскада на уровне базы данных может быть реализована позже.
Возможные значения on_delete находятся в django.db.models:
CASCADE
Каскадное удаление.Django эмулирует поведение ограничения SQL ON DELETE CASCADE, а также удаляет объект, содержащий ForeignKey.
Model.delete () не вызывается в связанных моделях, но сигналы pre_delete и post_delete отправляются для всех удаленныхobjects.
PROTECT
Предотвратить удаление ссылочного объекта, подняв ProtectedError, подкласс django.db.IntegrityError.
SET_NULL
Установить ForeignKeyноль;это возможно только в том случае, если null равно True.
SET_DEFAULT Установите ForeignKey в значение по умолчанию;значение по умолчанию для ForeignKey должно быть установлено.
SET ()
Установите для ForeignKey значение, переданное в SET (), или, если вызывается, вызывается результат его вызова.В большинстве случаев передача вызываемого будет необходима, чтобы избежать выполнения запросов во время импорта вашего models.py:
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import models
def get_sentinel_user():
return get_user_model().objects.get_or_create(username='deleted')[0]
class MyModel(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET(get_sentinel_user),
)
DO_NOTHING
Не предпринимать никаких действий.Если ваша база данных обеспечивает ссылочную целостность, это вызовет IntegrityError, если вы вручную не добавите ограничение SQL ON DELETE в поле базы данных.