检查模型的可用组件

时间:2015-05-16 18:32:02

标签: python django

models.py:

class CarType(models.Model):
    engine = models.CharField()
    transmission = models.CharField()


class Car(models.Model):
    car_type = models.ForeignKey(CarType,)
    color ...

class Details(models.Model):
    car = models.ForeignKey(Car, blank=True, null=True, related_name='details')
    engine = models.CharField()
    transmission = models.CharField()

例如,我们有宝马汽车。这种类型的汽车只需安装发动机等级A +。

然后,当我们向我们的汽车添加新的细节时(我们也可以添加带有详细信息的新车),我们需要检查 - 我们要安装的是一个细节,是否相同,这种车型支持。

所以,我们需要随时随地检查,我们添加了哪些车型,我们用什么细节创建的车。

如果我们将发动机等级B添加到我们的BMW(需要发动机等级A +),请提出一些例外情况。

Car类中的save方法还不够,因为我们可以通过Detail类向汽车添加新的细节。

你怎么解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用自定义验证程序。

from django.core.exceptions import ValidationError

def validate_a(instance):
    if instance.engine != 'A+':
        raise ValidationError('Instance requires A+ class engine')

然后在models.py

...
class Car(models.Model):
    ...
    car = models.ForeignKey(Car, 
                            blank=True,
                            null=True
                            related_name='details',
                            validators=[validate_a])