2013-08-06 2 views
0

Я пытаюсь получить мою программу для создания этого уникального номера, если подтверждено == Истина.Создание уникального номера, если он установлен как True django

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 

Итак, в основном генерировать po_number ТОЛЬКО в случае подтверждения == Истина. Я попытался вставить логику в случайные места, но это порождает ошибки. Где я должен это поставить?

+0

Вы можете поместить его в 'clean' метод в форме. –

ответ

2

я думаю, что это может иметь смысл поместить его в save метод:

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

Это будет указано, что запись должна быть новой и confirmed == True

ли Вы хотите только быть сгенерированы из нового записи? Вы хотите, чтобы чек имел место при обновлении записи? если да, вы можете установить его каждый раз, когда метод save называется:

def save(self, *args, **kwargs): 
    if self.confirmed: 
     self.po_number = self.validPONumber() 
    super(PurchaseOrder, self).save(*args, **kwargs) 
Смежные вопросы