2016-04-07 17 views
0

私は私の請求書のdjangoモデルを持っています。Djangoの一意の請求書番号

私は毎日(私のDjangoビュー機能で)一意の請求書番号を生成する必要があります。

例、インボイスなし、7日のために4月、2016年は次のようにしなければならない:

16040701、16040702、16040703、などどのようにこれを達成することができますか?

答えて

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##を与えます。注:1日に99件以上の請求書がある場合、これは機能しません。 99以上が必要な場合は{0:02d}{0:03d}に変更し、invoice_idフィールドにmax_length=9を設定してください。これは、yymmdd###の形式で1日あたり999の請求書に対応します。

+0

ありがとうRob – Sayantan

関連する問題