Создание экземпляра модели со случайно сгенерированным уникальным идентификатором размером с человека - PullRequest
0 голосов
/ 30 мая 2019

Мне нужна модель с полем со случайным, уникальным по размеру ключом.Мы собираемся использовать это для человека, чтобы объединить его в мозг и вызвать данные.

Что у меня есть:

def make_code():
    numbers = "".join(random.choice(string.digits) for x in range(4))
    letters = "".join(random.choice(string.ascii_lowercase) for x in range(2))
    return numbers + letters

class PinRecord(models.Model):
    pin = models.CharField(max_length=16, primary_key=True)
    data = models.TextField(blank=False, null=False)
    created = models.DateTimeField(auto_now_add=True)

    @classmethod
    def create_uniq(cls, action, data):
        created = False
        while not created:
            pin, created = cls.objects.get_or_create(pin=make_code(), defaults={'data':data})
        return pin.pin

Есть ли лучший способ сделать create_uniq?

В настоящее время существует небольшая вероятность того, что он зациклится в течение длительного времени, особенно если PinRecords не очищен должным образом или трафик выше ожидаемого.Альтернативная версия, которая ограничивает попытки конечным числом, оставляет нам нечего дать пользователю, кроме ошибки среднего пальца.

Рекомендуемое решение проблемы Случайного, уникального ключа, похоже, uuid, но пользователи будут возражать против записи и повторного ввода uuid.

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