2016-07-05 1 views
0

내가 djangorestframework의 == 3.3.2를 사용하고 비 모델 클래스와 함께 작동하지 않습니다DRF : 비 모델 시리얼 나는이 클래스의 인스턴스를 나타냅니다 JSON 데이터를</p> <p>파이썬 2.7.11+와

class APITransaction(object): 

    def __init__(self, created_on): #several_other_attrs 
     self.created_on = parser.parse(created_on) # this is Never called 
     # ... several other fields 

    @staticmethod 
    def create(attributes_json): 
     return APITransaction(attributes_json.get('createdOn'), ...) 

시리얼 라이저 : 이제

class MySerializer(serializers.Serializer): 
    created_on = serializers.DateTimeField() 
    # ... more fields here 

    class Meta: 
     ordering = ['-created_on'] 

    def create(self, validated_data): 
     return APITransaction.create(**validated_data) # why isn't this called? 

    def update(self, instance, validated_data): 
     raise NotImplemented 

내가에서 해당 시리얼 라이저를 사용하는 것을 시도하고있다 :

class TransactionView(viewsets.ViewSet): 
    serializer_class = MySerializer # probably useless 

    def list(self, request): 
     # ... 
     serializer = MySerializer(list_of_json, many=True) 
     return Response(serializer.data) 

여기서 list_of_jsonAPITransaction 클래스를 나타내는 json의 목록입니다.

불행하게도 나는 APITransaction.create 따라서 호출되지 않습니다 APITransaction.__init__ 내부의 parser.parse이 문자열을 캐스팅 사용한 적이 있다는 사실에 의한 'unicode' object has no attribute 'isoformat' 오류가 발생하고있다.

나는 이것이 사용자 시리얼 라이저에 대한 올바른 방법이 아니라는 것을 알고 있지만, DRM 문서에는 ORM이 아닌 클래스가있을 때해야 할 일에 대해서는 언급되어 있지 않다.

내가 직렬화기를 사용할 수있는 방법에 대한 아이디어가 있습니까? 단 하나의 인스턴스가있을 때 명시 적으로 APITransaction 객체를 작성한 다음 MySerializer에 전달할 수 있지만 json 내부에 여러 개의 객체가있는 경우이를 자동으로 수행하는 방법이 아닙니까?

답변

0

APITransaction.create는 데이터를 직렬화하는

를 호출되지 않습니다. create은 직렬화 변환 중에 만 호출되므로 호출하지 않아야합니다.

list은 데이터를 만들어서는 안되는 안전한 방법입니다. Viewsetcreate은 아마도 원하는 것일 것입니다. 또한 데이터의 유효성을 검사하고 직렬기를 저장해야합니다.

특히 step 1 of the Django REST framework tutorialworking with serializer을 통과해야합니다.

+0

실제로 데이터를 deserializing하고 있는데, 사용하기 위해 필요한 것은 serializer.save()입니다. – chefarov

+1

호출하기 위해서는 create is_valid, save and * NOT * .data validated_data 또는 저장 결과). – Linovia

관련 문제