Django, рандомизация параметра “по умолчанию” модели

Я хочу установить значение "по умолчанию" как случайным образом сгенерированную Строку для promotion_code части моей модели Promotion для этого, функция code_generate используется.

Проблема с кодом, ниже которого это походит default=code_generate() генерирует эту случайную строку один раз в сервер, начинают таким образом присваивать то же значение. Я вижу, что панелью администрации, каждый раз пытаюсь генерировать новое Продвижение, она дает мне ту же самую строку.

#generate a string, which is not already existing in the earlier Promotion instances
def code_generate():
    while 1:
        from django.conf import settings
        import random, string
        prom_code = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(6))
        try:
            Promotion.objects.get(promotion_code=prom_code)
        except:
            return prom_code

class Promotion(models.Model):
    purchase = models.ForeignKey('Purchase')
    promotion_code = models.CharField(max_length=20,unique=True,default=code_generate())

Как я могу сделать это случайным?

С уважением

8
задан Hellnar 13 February 2010 в 14:31
поделиться

2 ответа

Вам необходимо передать вызываемый объект как default , а не вызывать вызываемый объект:

promotion_code = models.CharField(max_length=20,unique=True,default=code_generate)
24
ответ дан 5 December 2019 в 07:35
поделиться

Как указано в другом ответе, самый простой способ получить случайную строку выглядит так:

str(random.random())[2:]

Altho' это строка чисел. Достаточно справедливо, пока вы не захотите заменить ее в конечном итоге на sha.

-2
ответ дан 5 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: