如何根据数据库数据在Django中使用验证器?

时间:2018-12-12 13:32:10

标签: python django validation model

我正在制作一个跟踪小型企业的网络应用程序。为此,我在应用程序中设计了两个模型。其中一个是所有存储信息,另一个是每个销售订单的信息,例如:

class Storage(models.Model):
    name = models.CharField('product name', max_length=64)
    quantity = models.DecimalField('inventory', max_digits=6, decimal_places=4, default=0)

class Orders(models.Model):
    product = models.ForeignKey('Storage', on_delete=models.CASCADE)
    volumn = models.DecimalField('order volumn', max_digits=6, decimal_places=4, default=0)

我希望为我的Orders类提供一个验证器,以便表单中“ 数量”的输入值不超过Storage类中相应的数量数据。我该如何实现?谢谢!

1 个答案:

答案 0 :(得分:0)

欢迎来到StackOverlow。这是我的第一个答案,因此,如果可以的话,如果您可以单击“接受为答案”,我将不胜感激。

您可以对模型使用clean()方法。此处更多:

https://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddo#id1

from django.db import models 
from django.core.exceptions import ValidationError

class Storage(models.Model):
    name = models.CharField('product name', max_length=64)
    quantity = models.DecimalField('inventory', max_digits=6, decimal_places=4, default=0)

class Orders(models.Model):
    product = models.ForeignKey('Storage', on_delete=models.CASCADE,related_name='storage')
    volumn = models.DecimalField('order volumn', max_digits=6, decimal_places=4, default=0)

    def clean(self):
        # Don't allow volumn to be bigger than quantity in Storage
        if  self.volumn > self.product.quantity :
            raise ValidationError({'volumn': ('Volumn cannot be bigger than storage quantity')})