Django 将主键字段更改为唯一字段

Django 将主键字段更改为唯一字段,django,django-models,django-shell,Django,Django Models,Django Shell,在设置数据库结构时,我愚蠢到为我的学生类设置了一个名为“student\u id”的字段作为“primary\u key=True”。直到很久以后,我才意识到,在(很少)的情况下,有必要更改所说的“学生id”。当通过表单执行此操作时,Django将自动复制学生,这不是我想要的 我想把“primary_key=True”改为“unique=True”,我想知道怎么做 我目前的计划是在Student类中添加一个名为“id”的字段,应用迁移,然后进入shell并简单地为其分配一个带有for循环的运行编

在设置数据库结构时,我愚蠢到为我的学生类设置了一个名为“student\u id”的字段作为“primary\u key=True”。直到很久以后,我才意识到,在(很少)的情况下,有必要更改所说的“学生id”。当通过表单执行此操作时,Django将自动复制学生,这不是我想要的

我想把“primary_key=True”改为“unique=True”,我想知道怎么做

我目前的计划是在Student类中添加一个名为“id”的字段,应用迁移,然后进入shell并简单地为其分配一个带有for循环的运行编号:

counter = 0
for s in Student.objects.all():
    counter += 1
    s.id = counter
    s.save()

然后,我会回到models.py并将行“primary_key=True”更改为“unique=True”。如何确保Django像对待没有主键的类一样对待“id”字段(即当新学生添加到数据库时自动分配新id)?

这不是一个简单的指南,但希望它能为您指明正确的方向

添加
id
字段时,请使用
AutoField
而不是
IntegerField
。添加新对象时,
AutoField
负责递增

创建并填充字段后,可以设置
主键=True
,并将其从
学生id
中删除


最终,您应该能够从您的模型中删除显式的
id
字段,因为如果您不手动设置主键,Django会自动创建一个字段。

该模型非常简单:它有一个名为“student\u id”的字段,“primary\u key=True”和许多其他不相关的字段-姓氏、姓氏、,我想你需要重命名->迁移->重命名->迁移周期来实现这一点,我是否需要在运行版本中手动设置新ID(如我在问题中所建议的)?我不确定,但我希望如此。