模型的Django视图中的唯一发票号

模型的Django视图中的唯一发票号,django,django-models,django-views,Django,Django Models,Django Views,我有一个django型号的发票 现在我需要为每天生成唯一的发票号(在Django视图函数中) 例如,2016年4月7日的发票号应为:16040701、16040702、16040703等 如何实现这一点?我将通过覆盖发票模型中的save()来实现这一点。首先,在模型中添加发票号字段: invoice\u id=models.CharField(blank=True,max\u length=8) 然后,重写save()方法: 这将为您提供所需的格式yymmd##。注意:如果您每天有超过99张发票

我有一个django型号的发票

现在我需要为每天生成唯一的发票号(在Django视图函数中)

例如,2016年4月7日的发票号应为:16040701、16040702、16040703等


如何实现这一点?

我将通过覆盖发票模型中的save()来实现这一点。首先,在模型中添加发票号字段:

invoice\u id=models.CharField(blank=True,max\u length=8)

然后,重写save()方法:

这将为您提供所需的格式
yymmd##
。注意:如果您每天有超过99张发票,则此项不起作用。如果您需要99以上,请将
{0:02d}
更改为
{0:03d}
,并在发票id字段上设置
max_length=9
。这将容纳每天999张格式为
yymmd###
的发票

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)