Django Rest: 직렬 변환기에서 예약어를 필드로 사용
5805 단어 pythondjangodjangorest
and
, in
, class
등과 같은 일부 절이 있는 요청 페이로드를 직렬화해야 하는 직장에서 문제를 발견했습니다.직렬화해야 하는 다음 요청 페이로드를 고려하십시오.
{
"values": [ "21234" ],
"and": true,
"count": 200,
"year": 2020
}
Django-Rest
Serializer
클래스는 필드를 동적으로 수정할 수 있는 메서드get_fields
를 제공합니다. 따라서 이 방법을 사용하여 다음과 같이 필드를 수정할 수 있습니다.from rest_framework import serializers
class DemoSerializer(serializers.Serializer):
values = serializers.ListField(child=serializers.CharField(), allow_empty=True)
and_ = serializers.BooleanField() # avoid naming conflicts
count = serializers.IntegerField()
year = serializers.IntegerField()
def get_fields(self):
fields = super().get_fields()
and_ = fields.pop('and_') # Dynamically modify field
fields['and'] = and_
return fields
이제
DemoSerializer
를 사용하여 payload
를 직렬화할 수 있습니다.import json
from rest_framework.exceptions import ValidationError
payload = """
{
"values": [ "21234" ],
"and": true,
"count": 200,
"year": 2020
}
"""
serializer = DemoSerializer(data=json.loads(payload))
try:
serializer.is_valid(raise_exception=True) # Perform validation
except ValidationError as error:
print(error)
else:
validated_data = serializer.validated_data
print(validated_data)
산출:
OrderedDict([('values', ['21234']), ('count', 200), ('year', 2020), ('and', True)])
도움이 되길 바랍니다 😊
Reference
이 문제에 관하여(Django Rest: 직렬 변환기에서 예약어를 필드로 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sajalshres/django-rest-use-reserved-keywords-as-a-field-in-serializer-3bkl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)