2016-02-12 59 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