Изменение столбца с первичным ключом на внешний ключ с помощью django
Итак, у меня есть модели, похожие на следующие:
class Address(BaseModel):
...
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
В то время это казалось подходящим, потому что адрес мог "принадлежать" пользователю, но недавно мне понадобилось повторно использовать эту таблицу для "заявителей", которые подобны пользователям, поэтому будут иметь доступ ко многим связанным с ними таблицам; поэтому я начал менять модели на следующие:
class Address(BaseModel):
...
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True) # unique=True where necessary
applicants = models.ForeignKey(Applicants, on_delete=models.CASCADE, blank=True, null=True)
Проблема, похоже, заключается в том, что поле user было первичным ключом для адреса, и поэтому, хотя я достиг некоторого прогресса, преодолев начальные ошибки миграции нового поля id
, которое django создает с помощью этого ответа, теперь я получаю следующую ошибку миграции:
psycopg2.errors.InvalidTableDefinition: column "user_id" is in a primary key
django.db.utils.ProgrammingError: column "user_id" is in a primary key
Похоже, что он жалуется на бывший первичный ключ, который я теперь пытаюсь превратить во внешний ключ. Кроме того, там уже присутствует большое количество данных. Я не уверен, как преодолеть эту ошибку.