我需要设置最小值和最大值的序列化器。目前,我就是这样做的。
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Products
extra_kwargs = {
'amount': {'min_value': 10000, 'max_value': 60000},
}
这很好,但是我不想对它进行硬编码,即我想从数据库中获取它,以防值变化。
我有2个型号。
1)Category
有min&最大值。
2)Products
以amount
和category
作为FK。输入的金额应在min-max
范围内。
如何实现这一目标?
例如: -
任何此类事件。
extra_kwargs = {
'amount': {'min_value': Category.min, 'max_value': Category.max},
}
答案 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_value
和min_value
。
喜欢
amount = serializers.IntegerField(required=False, min_value=10000, max_value=60000)