DRF - 设置Serializer字段的最大值和最小值

时间:2017-10-31 08:07:58

标签: python django django-rest-framework

我需要设置最小值和最大值的序列化器。目前,我就是这样做的。

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Products
        extra_kwargs = {
            'amount': {'min_value': 10000, 'max_value': 60000},
        }

这很好,但是我不想对它进行硬编码,即我想从数据库中获取它,以防值变化。

我有2个型号。

1)Category有min&最大值。

2)Productsamountcategory作为FK。输入的金额应在min-max范围内。

如何实现这一目标?

例如: -

任何此类事件。

extra_kwargs = {
                'amount': {'min_value': Category.min, 'max_value': Category.max},
}

2 个答案:

答案 0 :(得分:2)

也许覆盖validate方法是最好的选择。因为您可以访问类别值。

class ProductSerializer(serializers.ModelSerializer):
    def validate(self, data):
         category = data['category']
         amount = data['amount']
         if not (category.min_value < amount < category.max_value):
             raise serializers.ValidationError('Invalid amount blah blah blah...')

         return data

    ...

答案 1 :(得分:2)

3.5.0版的DRF的新版本已针对此问题进行了修复, 现在您可以在整数字段中使用max_valuemin_value

喜欢

amount = serializers.IntegerField(required=False, min_value=10000, max_value=60000)