2010-02-04 26 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