2010-02-04 6 views
233

Gibt es eine Möglichkeit, ein paar Felder in Django als einzigartig zu definieren?So definieren Sie zwei Felder "unique" als Paar

Ich habe eine Tabelle von Bänden (von Zeitschriften) und ich will nicht mehr als eine Bandnummer für das gleiche Journal.

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) 

Ich habe versucht, in den Bereichen journal_id und volume_numberunique = True als Attribut zu setzen, aber es funktioniert nicht.

Antwort

418

Es gibt eine einfache Lösung für Sie namens unique_together, die genau das tut, was Sie wollen.

Zum Beispiel:

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

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

Und in Ihrem Fall:

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

Wie kann ich überprüfen, welche Ausnahme wird geworfen, wenn ich versuche, um ein Objekt zu erstellen, das bricht Zwang? – gruszczy

+2

Ich würde sagen, Sie erhalten eine "ValidationError" -Ausnahme. Sehen Sie sich die Django-Dokumentation an: Model.validate_unique – Jens

+2

Wie würden Sie das sagen, wenn volum_number null sein könnte? Mysql scheint in diesem Fall nicht eindeutig zu sein. – Greg

Verwandte Themen