끝점에 전달되는 복잡한 JSON 데이터 구조를 구문 분석하기 위해 DRF에 사용자 지정 serializer를 작성하는 방법을 파악하는 데 어려움을 겪고 있습니다. json으로는 다음과 같습니다Django Rest Framework : Custom JSON Serializer
# views.py
class SaveData(views.APIView):
def post(self, request, *args, **kwargs):
name = request.POST.get('name')
site = request.POST.get('site')
data = request.POST.get('data')
그러나 data
항상 None
를 반환
{
"name": "new",
"site": "US",
"data": {
"settings": [],
"meta": {
"meta1":{}
}
}
}
가 여기 내 백엔드 코드입니다. request
객체로 가까이 검사에서 들어오는 JSON은 다음과 같습니다
# POST attribute of request object
'name' = 'new'
'site' = 'US'
'data[settings][0] = ''
'data[meta][meta1][] = ''
은 기본적으로 제대로 파이썬 dict
및 list
객체로 직렬화하기되지 않은 data
키와 연관된 중첩 된 JSON 객체처럼 보인다. 나는 커스텀 DRF 시리얼 라이저의 예제를 찾고 있었지만, 발견 한 것들 중 대부분은 장고 모델을 직렬화하기위한 것이었지만 그렇게 할 필요는 없다. 들어오는 데이터가 내 모델에 직접 매핑되지 않습니다. 대신 데이터를 저장하기 전에 일부 처리를 수행해야합니다.
data
JSON을 적절한 Python 개체로 올바르게 변환하는 사용자 지정 serializer에 대한 조언이 있습니까? 나는 이것으로 시작했지만 예외 (When a serializer is passed a 'data' keyword argument you must call '.is_valid()' before attempting to access the serialized '.data' representation. You should either call '.is_valid()' first, or access '.initial_data' instead.
)를 throw합니다. 다음은 생성 한 사용자 지정 serializer에 대한 코드입니다.
# serializers.py
class SaveDataSerializer(serializers.Serializer):
name = serializers.CharField()
site = serializers.CharField()
data = serializers.DictField()
def create(self, validated_data):
return dict(**validated_data)
감사합니다.