Как проверить, является ли созданный uuid уникальным? - PullRequest
0 голосов
/ 29 апреля 2020

Я создаю другой идентификатор поверх первичного ключа в целях безопасности, например:

uid = models.CharField(max_length=10, default=uuid.uuid4().hex[:8], editable=False)

, но как проверить, уникален ли он?

1 Ответ

0 голосов
/ 29 апреля 2020

Пока вы не храните очень большое количество элементов в секунду, вам не придется беспокоиться об уникальности uuid4.

Добавление уникального = True приведет к созданию уникальной записи здесь, но ваше сохранение ( ) потерпит неудачу, если он не уникален. Если вы действительно хотите быть уверены, вы можете сделать что-то вроде этого:

def generate_unique_uuid(model=None, field='code'):
    unique_id= uuid.uuid4()      # or some hex represenation

    filter = {field: unique_id}
    exists = model.objects.filter(**filter).exists()
    while exists:
        unique_id= uuid.uuid4()      # or some hex represenation
        filter = {field: unique_id}
        exists = model.objects.filter(**filter).exists()

    return unique_id


def generate_unique_id_your_model():
    code = generate_unique_code(model=YourModel, field='uid')
    return code

class YourModel(models.Model):
    uid = models.CharField(max_length=10, default=generate_unique_id_your_model, editable=False)

Или вы можете использовать поле UUID:

uid = models.UUIDField(default=uuid.uuid4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...