我有一个促销模型,其中包含促销代码和购买模型类的外键。
以下是模型:
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())
如何解决这些问题?
答案 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
参数。