Невозможно изменить таблицы после миграции Django в БД posgres
Мне действительно нужно знать, почему мы не можем изменить типы столбцов после миграции в Postgres DB.
Я уже создал свои модели по команде python manage.py makemigrations then do migrate. Все выглядит хорошо и таблицы создаются в БД postgres.
class test_API(models.Model):
IDnumber = models.IntegerField(null=False, blank=False)
State = models.CharField(max_length = 256, null = True)
Exlcludmethod = models.CharField(max_length=256, null=True)
class test_API_2(models.Model):
Idnumber = models.Foreignkey(test_API, max_length = 256, blank=False, null = False)
value = models.CharField(max_length=128, default="")
last_updated = models.DateTimeField(auto_now=True)
Допустим, мы хотим изменить столбец IDnumber с Integerfield на Charfield.
class test_API(models.Model):
IDnumber = models.CharField(null=False, blank=False)
State = models.CharField(max_length = 256, null = True)
Exlcludmethod = models.CharField(max_length=256, null=True)
и запустите python manage.py makemigrations снова
return self.cursor.execute(sql) psycopg2.errors.DuplicateTable: отношение "test_API" уже существует
.
Как мы можем изменять/изменять типы столбцов и выполнять миграции. Каков правильный способ сделать это?
Использование Django:Django==4.0.3 Python = 3.9.1 Posgresql = 2.9.3
Миграции Django с использованием RunPython для фиксации изменений
django 1.7 migrate получает ошибку "таблица уже существует"
Похоже, что вы хотите отбросить связь с test_API в test_API_2. Если вы хотите иметь возможность хранить строки типа 'abcd' и не пытаться сохранить что-либо из отношения, ранее созданного полем ForeignKey, то я считаю, что вам нужно сделать это в два этапа.
Первым шагом будет удаление (или комментирование) поля IDNnumber, выполнение миграций, затем добавление его обратно с новым типом поля.
Поле IDNumber было не просто целочисленным полем, оно имеет индексированное отношение к test_API, поэтому вам нужно сначала разорвать его, удалив поле, а затем создать новое поле с идентичным именем