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)
Если у вас нет никаких ценных данных, вы также можете просто удалить вашу БД и файлы миграции и заново выполнить миграцию с нуля, чтобы использовать новое значение по умолчанию.