Измените поле первичного ключа на уникальное поле
При настройке структуры моей базы данных я был достаточно глуп, чтобы установить поле с именем "student_id" как "primary_key=True" для моего класса Student. Я только позже понял, что есть (редкие) случаи, когда необходимо изменить сказанное "student_id". Делая это через форму, Django автоматически дублирует ученика, а это не то, что я хочу.
Я хотел бы изменить "primary_key=True" на "unique=True", и мне интересно, как это сделать.
Мой текущий план состоит в том, чтобы добавить поле с именем "id" в класс Student, применить миграцию и перейти в оболочку и просто присвоить ему рабочий номер с циклом 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" так же, как и в случае классов без первичного ключа (т. Е. Автоматически присваивает новый идентификатор при добавлении нового ученика в базу данных)?
1 ответ
Это не надежное руководство, но, надеюсь, оно укажет вам правильное направление.
Когда вы добавляете id
поле, используйте AutoField
вместо IntegerField
, AutoField
заботится об увеличении при добавлении новых объектов.
После того, как поле было создано и заполнено, вы можете установить primary_key=True
и удалите его из вашего student_id
,
В конце концов, вы сможете удалить явное id
поле из вашей модели, поскольку Django автоматически создает его, если вы не задали первичный ключ вручную.