2017-11-10 9 views
2

모델에 JSONField가 있는데, x이라고 말하면됩니다. DRF를 사용하여 모델 인스턴스를 저장합니다.Django - DRF에서 JSONField 비 직렬화

시리얼 : -

class ABCSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = ABC 
     fields = ('x',) 

    def create(self, data): 
     instance = ABC.objects.create(**data) 
     instance.x = {'key': 'value'} 
     instance.save() 

내가 데이터를 POST

, 객체를 생성하여 반환 된 응답이 올바르게 그러나 즉,

{ 
    'id': 1, 
    'x': { 
     'key': 'value' 
    } 
} 

를 역 직렬화, 내가 ID를 사용하여 데이터를 얻을 때, 얼마나 캘리포니아

{ 
    'id': 1, 
    'x': "{\"key\": \"value\"}" 
} 

즉, strx을 반환 n 데이터를 json으로 제대로 deserialize 할 수 있습니까?

답변

2

JSON 필드의 반환 데이터를 처리하기 위해 새 serializer 필드에서 to_internal_valueto_representation을 무시할 수 있습니다.

class JSONSerializerField(serializers.Field): 
    """Serializer for JSONField -- required to make field writable""" 

    def to_internal_value(self, data): 
     return data 

    def to_representation(self, value): 
     return value 

차례로

, 당신은 당신의 ABCSerializer이 필드를 사용합니다 :

class ABCSerializer(serializers.ModelSerializer): 
    x = JSONSerializerField() 

    class Meta: 
     model = ABC 
     fields = ('x',) 

이 문제 :`to_internal_value`와`to_representation`은 무엇입니까

+0

를 해결해야합니까? 적합한 문서를 가지고 나를 도울 수 있겠습니까? – PythonEnthusiast

+0

'to_internal_value' 함수는 다음과 같은 일을합니다 : 1. 기본 값의 Dict - 기본 데이터 타입의 Dict 2. 데이터 유효성 검사 도중 호출 됨 3. 기본 파이썬 데이터 형식을 내부 파이썬 표현 으로 복원합니다. 데이터가 –

+0

무효가되어, to_representation 반대하지 ValidationError 경우 : 1. 개체 인스턴스를 -> DICT 원시 데이터 유형 원시, 직렬화 데이터 형식 에 serializer.data 3. 변환 초기 데이터 유형을 호출 할 때 호출 2의 "" " –