2016-02-12 64 views
1

我有一個模型,其中有多對多的字段。我很想知道如何以及在哪裏實施對這些元素的檢查。django多對多驗證

實施例:

class Tire(models.Model): 
    type = ('front-left','front-right','rear-left','rear-right') 

class Car(models.Model): 
    tires = models.ManyToManyField('Tire') 

當創建Car對象我希望禁止對車具有相同類型的輪胎。

謝謝

編輯1:

呀......所以問題是,一個輪胎可以屬於多個汽車不多大意義......但是這是怎麼回事。

+0

我認爲在'Tyre'模型中將'Car'模型設置爲'ForeignKey'更有意義,而將'type'設置爲選擇字段。然後你在'tyre'模型中對'type'和'car'做'unique_together'。那有意義嗎? –

+0

我同意@ShangWang,你的輪胎對象似乎代表了一個獨特的對象,這意味着一個輪胎不應該被安裝在多輛車上。 – phenxd

+0

Aaa ...對不起。你是完全正確的。我錯誤地介紹了這種情況。我將編輯。 – mp3por

回答

3

如果它是可以接受的,你分配給哪個車輪的輪胎將在每次你將其分配給汽車時使用,也許更好的辦法將是有through型號:

class Tire(models.Model): 

    # your tire fields 

class Car(models.Model): 

    # car fields 
    tires = models.ManyToMany(Tire, through="CarTire") 

class CarTire(models.Model): 

    car = models.ForeignKey(Car, related_name="car_tire") 
    tire = models.ForeignKey(Tire) 

    tire_type = models.CharField(choices=types) 

    class Meta: 
     unique_together = [ 
      ('car', 'tire_type'), 
     ] 

這樣,這將是在數據庫級別保證每輛車只有一種輪胎。

+0

This works :) thank you – mp3por