내가 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_json
은 APITransaction
클래스를 나타내는 json의 목록입니다.
불행하게도 나는 APITransaction.create
따라서 호출되지 않습니다 APITransaction.__init__
내부의 parser.parse
이 문자열을 캐스팅 사용한 적이 있다는 사실에 의한 'unicode' object has no attribute 'isoformat'
오류가 발생하고있다.
나는 이것이 사용자 시리얼 라이저에 대한 올바른 방법이 아니라는 것을 알고 있지만, DRM 문서에는 ORM이 아닌 클래스가있을 때해야 할 일에 대해서는 언급되어 있지 않다.
내가 직렬화기를 사용할 수있는 방법에 대한 아이디어가 있습니까? 단 하나의 인스턴스가있을 때 명시 적으로 APITransaction
객체를 작성한 다음 MySerializer
에 전달할 수 있지만 json 내부에 여러 개의 객체가있는 경우이를 자동으로 수행하는 방법이 아닙니까?
실제로 데이터를 deserializing하고 있는데, 사용하기 위해 필요한 것은 serializer.save()입니다. – chefarov
호출하기 위해서는 create is_valid, save and * NOT * .data validated_data 또는 저장 결과). – Linovia