У меня есть модель (MyClass), и у этой модели есть некоторые существующие данные. Теперь я хочу добавить столбец автоинкремента. *** Идентификатор уже есть в модели, и это автоматическое увеличение
Первый подход: - Я создал две миграции. в первой миграции я передал значение по умолчанию как ноль, а во второй миграции я передал ниже функцию по умолчанию.
class MyClass(models.Model):
def get_next_store_code():
''' Returns the next value for the `code` field'''
last_value = Store.objects.all().order_by('code').last()
if last_value is None or last_value.code is None:
return 1123
return last_value.code + 1
code = models.IntegerField(default=get_next_store_code)
Теперь мой друг сказал мне, что get_next_store_code может генерировать два одинаковых значения. Я сказал ему как sql также обрабатывает случай гонки, но он сказал, что сначала django выполнит операцию чтения, а затем операцию записи, так что возможно, что в операции чтения он может прочитать одно и то же значение для двух запросов. Теперь я пытаюсь сохранить значение по умолчанию как NULL
code = models.IntegerField(default=None)
, чтобы сделать его уникальным, но получаю следующую ошибку.
django .db.utils.IntegrityError: столбец «код» содержит нулевые значения