Переименование первичного ключа Django
Я пытаюсь переименовать поле первичного ключа модели Django, но получаю django.db.utils.ProgrammingError: column "new_name" of relation "my_app_mymodel" does not exist
.
Модель выглядит примерно так:
from django.db import models as django_db_models
class MyModel(django_db_models.Model):
old_name = django_db_fields.BigAutoField(
null=False,
primary_key=True,
auto_created=True,
unique=True,
)
А миграции это:
# Generated by Django 3.2.6 on 2022-10-03 15:33
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('my_app', '0007_previous_migration'),
]
operations = [
migrations.RenameField(
model_name='mymodel',
old_name='old_name',
new_name='new_name',
),
]
Не уверен, что я делаю неправильно. Есть идеи?
P.S: Я не знаю, связано ли это, но есть внешние ключи от других таблиц к этой.
1 - переименуйте поле в модели :
from django.db import models as django_db_models
class MyModel(django_db_models.Model):
new_name = django_db_fields.BigAutoField(
null=False,
primary_key=True,
auto_created=True,
unique=True,
)
2- run python manage.py makemigrations
(он просто создаст новые миграции на основе этого изменения)
3- затем Измените имя поля :
operations = [
migrations.RenameField(
model_name='mymodel',
old_name='old_name',
new_name='new_name',
),
4 - run python manage.py migrate
(это переименует поле и сохранит ваши данные )
django.db.utils.ProgrammingError: column "new_name" of relation >"my_app_mymodel" does not exist
Когда вы видите вышеуказанное сообщение об ошибке, это означает, что вы еще не выполнили миграцию и только создали связанный файл миграции для данного изменения. Однако вы можете сделать это с помощью следующей команды, и тогда эта проблема будет решена, и вы больше не увидите эту ошибку:
python manage.py migrate