Django Views for Models中的唯一发票编号

时间:2016-04-07 17:13:03

标签: django django-models django-views

我的发票上有一个django模型。

现在我需要为每天生成唯一的发票号码(在我的Django Views功能中)。

示例,2016年4月7日的发票编号如:16040701,16040702,16040703等。

如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

我会通过覆盖您的发票模型中的save()来完成此操作。首先,为您的模型添加发票编号字段:

invoice_id = models.CharField(blank=True, max_length=8)

然后,覆盖save()方法:

def save(self, *args, **kwargs):
    today = datetime.date.today()
    today_string = today.strftime('%y%m%d')
    next_invoice_number = '01'
    last_invoice = Invoice.objects.filter(invoice_id__startswith=today_string).order_by('invoice_id').last()
    if last_invoice:
        last_invoice_number = int(last_invoice.invoice_id[6:])
        next_invoice_number = '{0:02d}'.format(last_invoice_number + 1)
    self.invoice_id = today_string + next_invoice_number
    super(Invoice, self).save(*args, **kwargs)

这将为您提供您正在寻找的格式yymmdd##。注意:如果您每天发票超过99张,则无法使用此功能。如果您需要超过99个,请将{0:02d}更改为{0:03d}并在invoice_id字段中设置max_length=9。这将包含每天999张发票,格式为yymmdd###