2010-02-04 46 views
233

有沒有辦法在Django中將幾個字段定義爲唯一?如何定義兩個字段「唯一」作爲夫婦

我有一張卷(期刊)的表格,我不想爲同一個期刊輸入更多的卷號。

class Volume(models.Model): 
    id = models.AutoField(primary_key=True) 
    journal_id = models.ForeignKey(Journals, db_column='jid', null=True, verbose_name = "Journal") 
    volume_number = models.CharField('Volume Number', max_length=100) 
    comments = models.TextField('Comments', max_length=4000, blank=True) 

我試圖把unique = True爲屬性的領域journal_idvolume_number,但它不工作。

回答

418

有一個簡單的解決方案叫做unique_together,它完全符合你的要求。

例如:

class MyModel(models.Model): 
    field1 = models.CharField(max_length=50) 
    field2 = models.CharField(max_length=50) 

    class Meta: 
    unique_together = ('field1', 'field2',) 

而在你的情況:

class Volume(models.Model): 
    id = models.AutoField(primary_key=True) 
    journal_id = models.ForeignKey(Journals, db_column='jid', null=True, verbose_name = "Journal") 
    volume_number = models.CharField('Volume Number', max_length=100) 
    comments = models.TextField('Comments', max_length=4000, blank=True) 

    class Meta: 
    unique_together = ('journal_id', 'volume_number',) 
+0

我如何檢查,有什麼會拋出異常,當我試圖創建一個打破這個對象約束? – gruszczy

+2

我會說你會得到一個「ValidationError」異常。看看Django文檔:Model.validate_unique – Jens

+2

如果volume_number可能爲null,你將如何處理這個問題?在這種情況下,Mysql似乎不會執行獨特的操作。 – Greg