2013-08-30 31 views
3

我正在寫一小會計軟件。一個功能是創建賬單。這些賬單有一個序列號,應該隨每個賬單增加。但有時候我需要在這個系統之外創建一個,所以我需要能夠改變這個值。所以我在找的是一種在Django管理中有一個帶有默認值的整數字段的方法,它始終是最大值+1,但是可以編輯。不幸的是,我不知道從哪裏開始。我怎樣才能做到這一點?如何獲取通常在Django中增加的字段的默認值?

回答

4

您可以通過使用一個函數或lambda表達式作爲默認做到這一點:

class Bill(models.Model): 
    serial = models.IntegerField(default=lambda: Bill.objects.latest('id').serial + 1) 
    # ... 

基本上,獲取最新的模型,並使用其串行(加1)作爲默認值。如果你的序列號是一個整數,這將起作用,否則你將不得不使用你自己的邏輯。還請注意,如果數據庫中沒有任何賬單,.latest()將引發DoesNotExist。

+0

這很完美。我其實嘗試過,但沒有拉姆達。我會讀到。謝謝! – JasonTS

1

爲此,您始終可以使用AutoField。如該鏈接所示,數據庫會自動爲您增加,但您仍可以明確地設置自己的值。

查看明確指定自動主鍵值的幾行。

+0

謝謝。但是,如果我正確地採用這種方法,它將不會幫助我在Django管理員內部,是嗎?但是,如果我編寫自己的後端,很高興知道。 – JasonTS

+0

老實說,我不確定這是怎麼出現在管理員中的。這樣做的好處是數據庫本身處理下一個ID的生成,並且每次創建時都不需要查詢對象。 – Ben

+0

據我所見,它隱藏在管理員的領域! – JasonTS

相關問題