简体   繁体   English

验证管理站点保存在Django中

[英]Validating admin site save in Django

I have the following two classes defined in models.py 我在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)

So my model allows for multiple parts, but I want the part names to be unique. 所以我的模型允许多个零件,但是我希望零件名称是唯一的。 For example, only one part with name "engine" should be allowed for a given car. 例如,对于给定的汽车,只允许使用名称为“ engine”的零件。 How do I enforce this uniqueness? 如何实施这种独特性?

Things I have looked into: 我调查过的事情:

class save() 

Overriding the default save() for Car doesn't help because parts isn't updated until save is hit. 覆盖Car的默认save()并没有帮助,因为在命中保存之前部件不会更新。

class save_model()

This will not work because it always saves. 这将不起作用,因为它总是可以保存。

So what are my options for enforcing uniqueness of part names? 那么,加强零件名称唯一性的选项是什么?

UPDATED: 更新:

Although I want only one part with name engine to be associated with a car, I still want the ability to define multiple parts with name engine, of course with different values. 尽管我只希望一个带有名称引擎的零件与一辆汽车相关联,但我仍然希望能够使用名称引擎定义多个零件,当然它们具有不同的值。

So a car with can have a part (part.name=Engine and part.value=V6) and another car can have a part (part.name=Engine and part.value=V4, but a car can't have two parts that have part.name == engine. 因此,具有的汽车可以具有一部分(part.name = Engine和part.value = V6),而另一辆汽车可以具有一部分(part.name = Engine和part.value = V4,但是汽车不能具有两个部分)具有part.name ==引擎。

EDIT: 编辑:

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)

treat part_type as part type id (eg type='engine') for engines it will be unique 将part_type视为引擎的零件类型ID(例如type ='engine'),它将是唯一的

more about ForeignKey 有关ForeignKey的更多信息

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM