Изменение первичного ключа моделей Django с отношениями «многие ко многим» - PullRequest
0 голосов
/ 27 марта 2019

У меня есть две модели, Image и Dataset, которые связаны через отношение многие ко многим:

class Image(models.Model):
  id = models.CharField(max_length=255, primary_key=True)
  datasets = models.ManyToManyField(Dataset, blank=True)

class Dataset(models.Model):
  ...

Я хотел использовать последовательное целое число в качестве идентификатора вместо VARCHAR.Поэтому я переименовал поле id в id_old, что заставило Django создать целочисленное автоматическое поле в виде столбца id со следующими миграциями, которые я хотел, к которым я добавил, чтобы удалить поле id_old.

operations = [
    migrations.RenameField(
        model_name='image',
        old_name='id',
        new_name='id_old',
    ),
    migrations.AddField(
        model_name='image',
        name='id',
        field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
    ),

Но проблема в том, что теперь сквозная таблица в бэкэнде Postgres имеет столбец image_id с типом VARCHAR, поэтому я получаю следующую ошибку, если хочу добавить dataset к image:

operator does not exist: character varying = integer
LINE 1: ...tasets" WHERE ("app_image_datasets"."image_id" = 12764 AN...
                                                          ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

Поскольку поле image_id не изменялось во время этих операций, я также теряю связи между наборами данных и изображениями.

Так как я могу изменить поле первичного ключа в модели с отношениями M2M?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...