사전 목록의 유효성을 검사하는 직렬 변환기를 어떻게 작성합니까?
전송되는 샘플 페이로드는 다음과 같습니다.
"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"
},
]
class PaymentDiscountSerializer(serializers.DictField):
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 PaymentDiscountListSerializer(serializers.ListField):
"""Serialize discount object"""
child = PaymentDiscountSerializer()
class PaymentSerializer(serializers.ModelSerializer):
payment_discount = PaymentDiscountListSerializer()
# Other model fields
이것으로 serializer.data를 사용하여 페이로드의 payment_discount 객체에 액세스 할 수 있지만 불행히도 예를 들어 페이로드에 Decimal 유형이 아닌 discount_earned 값이 포함 된 경우 사전에 대한 유효성 검사가 수행되지 않습니다.
사용 : Django == 1.10.2 & djangorestframework == 3.5.1
serializer를 단순화 할 수 있다고 생각합니다 ... 테스트하지는 않았지만 다음과 같이 사용할 수 있습니다.
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
자세한 내용은 http://www.django-rest-framework.org/api-guide/serializers/#field-level-validation 을 참조 하세요 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다