Я хочу установить значение "по умолчанию" как случайным образом сгенерированную Строку для 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())
Как я могу сделать это случайным?
С уважением
Вам необходимо передать вызываемый объект как default
, а не вызывать вызываемый объект:
promotion_code = models.CharField(max_length=20,unique=True,default=code_generate)
Как указано в другом ответе, самый простой способ получить случайную строку выглядит так:
str(random.random())[2:]
Altho' это строка чисел. Достаточно справедливо, пока вы не захотите заменить ее в конечном итоге на sha.