【问题标题】:Model-wide validation for a Field type in Django ie., validate that all DecimalField of a model is greater than 0在 Django 中对 Field 类型进行模型范围的验证,即验证模型的所有 DecimalField 是否大于 0
【发布时间】:2021-10-27 16:24:51
【问题描述】:

我有三个 Decimal 字段,它们都具有相同的验证器:

`

class MyModel(models.Model):
    one = models.DecimalField(validators=[great_than_zero])
    two = models.DecimalField(validators=[great_than_zero]
    three = models.DecimalField(validators=[great_than_zero]

`

有没有一种 Pythonic 的方式来为整个模型强制执行这个验证器,这样任何十进制字段都不能有负数。如果我知道我的所有 Decimal 字段都是正数,那么最好不要为每个字段正确地编写同一段代码。

【问题讨论】:

    标签: django django-validation


    【解决方案1】:

    你可以自己定义一个字段:

    # app_name/fields.py
    
    from django.core.exceptions import ValidationError
    from django.db.models import DecimalField
    
    
    def greater_than_zero(value):
        if value <= 0:
            raise ValidationError('The value should be greater than zero.', code='min_value_eq')
    
    
    class PositiveDecimalField(DecimalField):
        default_validators = [greater_than_zero]

    然后在模型中使用该字段:

    # app_name/models.py
    
    from app_name.fields import PositiveDecimalField
    
    class MyModel(models.Model):
        one = PositiveDecimalField()
        two = PositiveDecimalField()
        three = PositiveDecimalField()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 2015-09-24
      • 2017-08-16
      • 2019-12-24
      • 2011-12-20
      • 2011-08-21
      • 2011-11-13
      相关资源
      最近更新 更多