Переименование поля, которое было первичным ключом в models.py

У меня есть модель со следующими полями:

email                   = models.EmailField(verbose_name="email", max_length=60, unique=True)
    department              = models.TextField(verbose_name="department")
    username                = models.CharField(max_length=30, unique=True)
    emp_id                  = models.AutoField(primary_key=True)
    is_admin                = models.BooleanField(default=False)
    is_active               = models.BooleanField(default=True)
    is_staff                = models.BooleanField(default=False)
    is_superuser            = models.BooleanField(default=False)
    hide_email              = models.BooleanField(default=True)
    name                    = models.TextField(verbose_name="employee name")

Я хочу переименовать поле "emp_id" в "id", как вы видите, это поле является первичным ключом. Не могли бы вы создать файл миграции для этого?

Спасибо

from django.db import migrations, models
import django.db.models.deletion

class Migration(migrations.Migration):

    dependencies = [
        ('your_app_name', 'name_of_previousmigration_file'),
    ]

    operations = [
        migrations.RemoveField(
            model_name='modelname',
            name='emp_id',
        )
    ]

Вы изменяете поле на:

class MyModel(models.Model):
    # …,
    id = models.AutoField(primary_key=True, db_column='emp_id')
    # …

Если вы затем выполните manage.py makemigrations, Django спросит, переименовали ли вы fied:

Did you rename mymodel.emp_id to mymodel.id (a AutoField)? [y/N]

вопрос, на который вы отвечаете словами yes.

В этом случае в качестве идентификатора базы данных будет по-прежнему использоваться emp_id. Если вы хотите переименовать колонку базы данных, вы можете просто удалить поле emp_id, и Django будет использовать поле по умолчанию id в качестве первичного ключа, и вы можете позволить Django делать миграции таким же образом.

class ModelName(models.Model):
    id = models.AutoField(primary_key=True)
    # other fields

Затем запустите python manage.py makemigrations

Появится сообщение, в котором нужно подтвердить, что вы хотите переименовать поле emp_id в id. Введите y для подтверждения утвердительного ответа.

Затем запустите python manage.py migrate

В каталоге приложения вы найдете файлы миграции.

Вернуться на верх