У меня есть две модели, 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?