Django,随机化模型的“默认”参数

时间:2010-02-13 14:31:13

标签: django django-models

我想将“default”值设置为我的Promotion模型的promotion_code部分的随机生成的String,因为使用了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())

如何随意制作?

此致

2 个答案:

答案 0 :(得分:24)

你需要传递一个可调用的default,而不是调用callable:

promotion_code = models.CharField(max_length=20,unique=True,default=code_generate)

答案 1 :(得分:-2)

the other answer所示,获取随机字符串的最简单方法如下:

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

Altho'它是一串数字。很公平,直到你想要用sha替换它。