Django 使用DRF序列化程序验证字典列表
如何编写序列化程序来验证字典列表 正在发送的示例有效负载为:Django 使用DRF序列化程序验证字典列表,django,django-rest-framework,Django,Django Rest Framework,如何编写序列化程序来验证字典列表 正在发送的示例有效负载为: "payment_discount": [ { "discount_rule_id": 1, "discount_rule_name": "10 day early payment", "discount_earned": "298.00" }, { "discount_rule_id": 2, "discount_rule_nam
"payment_discount": [
{
"discount_rule_id": 1,
"discount_rule_name": "10 day early payment",
"discount_earned": "298.00"
},
{
"discount_rule_id": 2,
"discount_rule_name": "Store discount",
"discount_earned": "5.50"
},
]
取自和:
这样,我可以使用serializer.data访问有效负载中的payment_折扣对象,但不幸的是,如果有效负载包含的折扣挣得值不是Decimal类型,则不会对字典进行验证
使用:Django==1.10.2&djangorestframework==3.5.1我认为您可以简化序列化程序。。。 尚未测试,但您可以使用以下内容:
class PaymentDiscountSerializer(serializers.Serializer):
"""Serialize discounts"""
discount_rule_id = serializers.IntegerField(required=False)
discount_rule_name = serializers.CharField(max_length=50)
discount_earned = serializers.DecimalField(max_digits=10, decimal_places=3)
class PaymentSerializer(serializers.ModelSerializer):
payment_discount = PaymentDiscountSerializer(many=True)
# Other model fields
它应该给你一个你想要的对象列表
对于验证,它应该像这样开箱即用
但是,我还没有测试过它。如果验证有问题,可以定义自己的验证。
例如:
class PaymentDiscountSerializer(serializers.Serializer):
"""Serialize discounts"""
discount_rule_id = serializers.IntegerField(required=False)
discount_rule_name = serializers.CharField(max_length=50)
discount_earned = serializers.DecimalField(max_digits=10, decimal_places=3)
def validate_discount_rule_id(self, value):
# Validation logic of the discount_rule_id field
#
return value
def validate(self, attrs):
# Validation logic of all the fields
#
return attrs
有关更多信息,请参阅
class PaymentDiscountSerializer(serializers.Serializer):
"""Serialize discounts"""
discount_rule_id = serializers.IntegerField(required=False)
discount_rule_name = serializers.CharField(max_length=50)
discount_earned = serializers.DecimalField(max_digits=10, decimal_places=3)
def validate_discount_rule_id(self, value):
# Validation logic of the discount_rule_id field
#
return value
def validate(self, attrs):
# Validation logic of all the fields
#
return attrs