在Django中验证管理站点保存

时间:2014-04-16 16:13:20

标签: python django

我在models.py

中定义了以下两个类
class Part(models.Model):
    name = models.CharField(max_length=32)
    value = models.CharField(max_length=32)

class Car(models.Model):
    name = models.CharField(max_length=32)
    parts = models.ManyToManyField(Part)

所以我的模型允许多个部分,但我希望部件名称是唯一的。例如,只有一个名为" engine"应该允许给定的汽车。如何强制执行此独特性?

我已经研究过的事情:

class save() 

覆盖Car的默认save()没有帮助,因为在保存命中之前,部件不会更新。

class save_model()

这不起作用,因为它总是保存。

那么我有哪些选项可以强制执行部件名称的唯一性?

更新:

虽然我只希望将一个带有名称引擎的部件与汽车相关联,但我仍然希望能够使用名称引擎定义多个部件,当然还有不同的值。

所以一辆车可以有一个零件(part.name = Engine和part.value = V6)而另一辆车可以有一个零件(part.name = Engine和part.value = V4,但一辆车可以&#39 ; t有两个部分有part.name == engine。

1 个答案:

答案 0 :(得分:0)

修改

class Part(models.Model):
    name = models.CharField(max_length=32)
    value = models.CharField(max_length=32)

class CarPart(models.Model):
    car = models.ForeignKey(Car)
    part_type = models.CharField(max_length=32, unique=true)
    part = models.ForeignKey(Part)

class Car(models.Model):
    name = models.CharField(max_length=32)

将part_type视为发动机的零件类型ID(例如type ='engine'),它将是唯一的

更多关于ForeignKey