重命名 models.py 中作为主键的字段

Rename a field which was Primary Key in 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<b>, db_column='emp_id'</b>)
    # …

如果你然后 运行 manage.py makemigrations,Django 会询问你是否重命名字段:

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

你用 yes 回答的问题。

这仍将使用 emp_id 作为数据库 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 确认是。

然后运行pythonmanage.py迁移

在您的应用程序目录中,您会找到迁移文件。