Измените поле первичного ключа на уникальное поле

При настройке структуры моей базы данных я был достаточно глуп, чтобы установить поле с именем "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 автоматически создает его, если вы не задали первичный ключ вручную.

Другие вопросы по тегам