Переименование поля, которое было первичным ключом в 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
В каталоге приложения вы найдете файлы миграции.