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

时间:2015-08-28 16:18:04

标签: django django-models django-shell

在设置我的数据库结构时,我愚蠢到设置了一个名为" student_id" as" primary_key = True"为我的学生班。我后来才意识到,有(罕见)有必要改变所说的" student_id"。当通过表单执行此操作时,Django将自动复制学生,这不是我想要的。

我想改变" primary_key = True" to" unique = True",我想知道如何做到这一点。

我目前的计划是添加一个名为" id"到Student类,应用迁移,然后进入shell并简单地为它分配一个带有for循环的运行号码:

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

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

1 个答案:

答案 0 :(得分:0)

这不是一个万无一失的指南,但希望它会指出你正确的方向。

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

创建并填充字段后,您可以设置primary_key=True,并将其从student_id中删除。

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