django - django 中的多对多验证

标签 django django-models

我有一个模型,其中包含多对多字段。我有兴趣知道应该如何以及在哪里对这些元素进行检查。

示例:

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

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

创建汽车对象时,我想禁止汽车拥有相同类型的轮胎。

谢谢

编辑1:

是的...所以问题是一个轮胎可以属于多辆汽车,这没有多大意义...但事实就是这样。

最佳答案

如果您可以接受每次将轮胎分配给汽车时分配给哪个轮胎,也许更好的方法是使用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'),
        ]

这样就可以在数据库级别保证每辆车每种类型只有一个轮胎。

关于django - django 中的多对多验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35369403/

相关文章:

python - 如何管理django中的锁写机制

python - 向 django 添加新应用

django - 创建 Django session 时

python - celery 错过了心跳(on_node_lost)

django - 如何在我的查询中使用反向关系?(django)

django - 在 Django 模型中,如何防止基于特定字段的删除?

Django 1.8 : When items are related via two separate relationships, 如何指定要使用的关系?

python - Django:从数据库生成模型与从模型生成数据库

python - 导入错误 : Could not import settings 'company.foo.settings' (Is it on sys. 路径?): No module named foo. 设置

Django认证: Creation of objects by users before registration