Сделайте IntegerField уникальным в Django - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть модель (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: столбец «код» содержит нулевые значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...