2009-12-25 82 views
2

我有一個讓人們創建票據的應用程序,每個使用我的應用程序的帳戶所有者都可以創建票據。Django:如何自動增加可以有多個相同值的字段

首先,它應該是唯一的每個帳戶,你認爲?或者,它應該是完全獨特的嗎?

像這樣:

class Ticket(models.Model): 
    """ 
    An ticket created by an Account holder. 
    """ 
    account = models.OneToOneField('Account') 
    number = models.CharField(max_length=20, verbose_name='Ticket Number') 

    class Meta: 
     unique_together = (('account', 'number'),) 

或此,分別爲:

class Ticket(models.Model): 
    """ 
    An ticket created by an Account holder. 
    """ 
    account = models.OneToOneField('Account') 
    number = models.CharField(unique=True, max_length=20, verbose_name='Ticket Number') 

然後,當然我想要的順序數字來表示該帳戶,所以可能是一個爲一個帳戶樣本次序數有id:「chris」可能是「chris-41984」或類似的東西。你會爲此創建一個模型方法,還是...?

+0

可以一個賬戶有多張票嗎? – czarchaic

回答

5

如果用戶可以創建多張票據,則一對一字段不合適。其次,票號完全是武斷的,對嗎?換句話說,它只需要是唯一的(我沒有看到任何理由爲什麼它應該是唯一的每個用戶到目前爲止你所說的),所以你可能只是使用主鍵,除非你計劃與其他數據存儲集成。

所以,你可以簡單地說:

class Ticket(models.Model): 
    account = models.ForiegnKey(Account) 

    # "ticket number" is just ticket.id. 
    # if you don't like that, then say: 
    #number = models.CharField(primary_key=True) 

請注意,如果取消註釋number定義,您會在創建模型實例需要指定它 - 主鍵不能None。或者,覆蓋保存方法以根據您的要求自動生成票據number字段。

+2

丹尼爾是絕對正確的:除非你有一個非常有說服力的理由以其他方式做,只需使用Ticket.id並讓它自動增加。這是聰明纔會讓你陷入困境的情況之一。 –

+0

我想完全獨一無二。如果您是使用我的系統的客戶,您是否希望擁有自己的一系列以「FOOACCOUNT_0001」開頭的門票號碼,或者如果您的第一張門票以「5168481」形式出現,您會沒問題。我希望後者可以,因爲我不想要一些棘手的系統。 – orokusaki

相關問題