简体   繁体   English

如果将其设置为True django,则生成唯一编号

[英]Generating a unique number if it is set as True django

I'm trying to get my program to generate this unique number if confirmed == True. 如果确认== True,我正在尝试让我的程序生成这个唯一的数字。

class PurchaseOrder(models.Model):
    po_number = models.IntegerField(unique=True)
    confirmed = models.NullBooleanField(null=True)

 def save(self, *args, **kwargs):
    if not self.pk:
        self.po_number = self.validPONumber()
    super(PurchaseOrder, self).save(*args, **kwargs)

def validPONumber(self):
     low= 50000
     high =1000000
     random.seed()
     value = random.randrange(low, high)
     while 0 < len(PurchaseOrder.objects.filter(po_number=value)):
        value = random.randrange(low, high)
     return value

So, basically generate a po_number ONLY if confirmed == True. 所以,如果确认== True,基本上只生成一个po_number。 I've tried inserting the logic in random places, but it's generating errors. 我已经尝试在随机位置插入逻辑,但它会产生错误。 Where should I put it? 我应该把它放在哪里?

i think it could make sense to put it in the save method: 我认为将它放在save方法中是有意义的:

def save(self, *args, **kwargs):
    if not self.pk and self.confirmed:
        self.po_number = self.validPONumber()
    super(PurchaseOrder, self).save(*args, **kwargs)

This would specify that a record must be new and confirmed == True 这将指定记录必须是新的并且confirmed == True

Do you want it only to be generated from new records? 您是否希望仅从新记录生成? Do you want the check to take place when you update a record? 您是否希望在更新记录时进行检查? if so you could set it for every time the save method is called: 如果是这样,你可以在每次调用save方法时设置它:

def save(self, *args, **kwargs):
    if self.confirmed:
        self.po_number = self.validPONumber()
    super(PurchaseOrder, self).save(*args, **kwargs)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM