2010-02-04 22 views
233

Birkaç alanı Django'da benzersiz olarak tanımlamanın bir yolu var mı?Çift olarak "benzersiz" iki alan nasıl tanımlanır

Bir yığın birimim var (dergi) ve aynı gün için bir cilt numarası daha istemiyorum.

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) 

Ben alanlar journal_id ve volume_number yılında öznitelik olarak unique = True koymak için çalıştı ama çalışmıyor.

cevap

418

unique_together adlı sizin için tam olarak ne istediğinizi yapan basit bir çözüm var.

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

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

Ve sizin durumda: Örneğin

nasıl kontrol edebilirim

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

, atılacak ne istisna, bu tatili bir nesne oluşturmaya çalıştığınızda kısıtlama? – gruszczy

+2

"ValidationError" istisnası alacağınızı söyleyebilirim. Django belgelerine bir göz atın: Model.validate_unique – Jens

+2

Eğer volume_number boş olabilirse bunu nasıl ele alırsınız? Mysql, bu durumda eşsiz bir şey yapmayacak gibi görünmeyecek. – Greg

İlgili konular