Python DRF-设置序列化程序字段的最大值和最小值
我有一个序列化程序,需要在其中设置最小值和最大值。目前,我就是这样做的Python DRF-设置序列化程序字段的最大值和最小值,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个序列化程序,需要在其中设置最小值和最大值。目前,我就是这样做的 class ProductSerializer(serializers.ModelSerializer): class Meta: model = Products extra_kwargs = { 'amount': {'min_value': 10000, 'max_value': 60000}, } 这很好,但我不想硬编码它,即我想从数据
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Products
extra_kwargs = {
'amount': {'min_value': 10000, 'max_value': 60000},
}
这很好,但我不想硬编码它,即我想从数据库中获取它,以防值发生变化
我有两个模型
1) 类别
中有最小值和最大值
2) 产品
,其具有作为FK的金额
和类别
。输入的金额应在min-max
范围内
如何实现这一目标?
例如:-
任何这类的东西
extra_kwargs = {
'amount': {'min_value': Category.min, 'max_value': Category.max},
}
也许重写
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
...
类ProductSerializer(serializers.ModelSerializer):
def验证(自身、数据):
类别=数据['category']
金额=数据[“金额”]
如果不是(类别最小值<金额<类别最大值):
引发序列化程序。ValidationError('无效金额等等…'))
返回数据
...
3.5.0版的新版本DRF解决了此问题,
现在,您可以在整数字段中使用max\u value
和min\u value
像这样
amount = serializers.IntegerField(required=False, min_value=10000, max_value=60000)
我想我不明白。是否要使用
ProductSerializer
创建新产品?但是您有多个类别,并且希望确保当有人将新产品添加到某个类别时,该产品的数量将符合此特定类别的范围?是的。这就是我的意思。这也是我要做的,请参见文档中的