Django,独特的领域生成

时间:2010-02-13 13:18:35

标签: django django-models

我有一个促销模型,其中包含促销代码和购买模型类的外键。

以下是模型:

class Promotion(models.Model):
 purchase =  models.ForeignKey('Purchase')
 promotion_code = models.CharField(max_length=20)
 def promotion_code_generate(self): #returns a string based promotion code with 7 length
  from django.conf import settings
  import random, string
  return ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(7))
 class Meta:
  unique_together = (("purchase", "promotion_code"),)

现在我希望我的promotion_code字段对于每次购买都是唯一的,为此我已将unique_together = (("purchase", "promotion_code"),)添加到Class元。通过管理面板输入新条目时,它工作正常,因为促销代码为空白,我必须手动输入。

但是我希望这样做是唯一的,这样当购买完成后,系统应该采用该Purcase模型实例并自动生成通过Promotion模型的购买字段绑定的此Promotion类实例。

为此我需要两件事:

1 - 我需要使用我的promotion_code_generate方法来检查早期的促销模型实例,以及过去是否存在当前生成的代码以进行交易,如果没有重新再生,则重新尝试重新尝试直到不存在的促销找到该购买的代码字符串。

2-我尝试将默认的promotion_code_generation分配给promotion_code字段,但失败了:

promotion_code = models.CharField(max_length=20,default=self.promotion_code_generate())

如何解决这些问题?

1 个答案:

答案 0 :(得分:3)

import random

@property
def promotion_code_generate(self):
    while 1:
        prom_code = str(random.random())[2:]
        try:
            Promotion.objects.get(promotion_code=prom_code)
        except:
            return prom_code

将其定义为@property,您可以将其指定给default参数。

相关问题