Django Migration не работает из-за несовместимости типа внешнего ключа

Я добавил поля secondary_client и secondary_pi в таблицу List, и когда я запускаю миграции, я получаю эту ошибку:

django.db.utils.OperationalError: (3780, "Ссылающийся столбец 'secondary_client_id' и ссылающийся столбец 'id' в ограничении внешнего ключа 'todo_list_secondary_client_id_cd997cc0_fk_todo_client_id' несовместимы.")

.

Это мой models.py:

class Client(models.Model):
    first_name = models.CharField(max_length=60)
    last_name = models.CharField(max_length=60)
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    organisation = models.CharField(max_length=60)
    email = models.EmailField(max_length=70, blank=True, null=True, unique=True)

class List(models.Model):
    ...
    client = models.ForeignKey(Client, related_name='client', blank=True, null=True, on_delete=models.CASCADE)
    pi = models.ForeignKey(Client, related_name='pi', blank=True, null=True, on_delete=models.CASCADE)
    secondary_client = models.ForeignKey(Client, related_name='secondary_client', blank=True, null=True, on_delete=models.CASCADE)
    secondary_pi = models.ForeignKey(Client, related_name='secondary_pi', blank=True, null=True, on_delete=models.CASCADE)
    ...

Миграции работают на моей локальной машине, но не работают на сервере.

Если вы перешли с версии django меньше 3.2 на версию больше 3.2, они будут иметь разные значения по умолчанию для типа поля ID

В файле settings.py вы можете установить следующее:

DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'

Это вернет значение по умолчанию к тому, что было до версии 3.2. Вы также можете установить значение BigAutoField, новое значение по умолчанию, и makemigrations переведет ваши модели на новое значение по умолчанию, если другие значения по умолчанию не установлены на уровне приложения, в apps.py

from django.apps import AppConfig

class MyAppConfig(AppConfig):
    default_auto_field = 'django.db.models.AutoField'
    name = 'my_app'

...или для конкретных моделей

class Post(models.Model):
    id = models.AutoField(primary_key=True)

Если у вас нет никаких ценных данных, вы также можете просто удалить вашу БД и файлы миграции и заново выполнить миграцию с нуля, чтобы использовать новое значение по умолчанию.

Вернуться на верх