0

在设置我的数据库结构时,我很愚蠢地为我的学生类设置了一个名为“student_id”的字段作为“primary_key=True”。我直到很久以后才意识到有(很少)需要更改所说的“student_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)?

4

1 回答 1

0

这不是一个万无一失的指南,但希望它能为您指明正确的方向。

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

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

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

于 2015-08-28T16:26:38.000 回答