我正在使用djangorestframework == 3.3.2和Python 2.7.11 +
我在json中有数据代表这个类的实例:
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列表。
不幸的是,由于永远不会调用'unicode' object has no attribute 'isoformat'
因此APITransaction.create
parser.parse
从未用于投射字符串,因此导致APITransaction.__init__
错误。< / p>
我知道这不是用户序列化程序的正确方法,但DRF文档并未提及有关非ORM类时应执行的操作的任何内容。
关于如何使用Serializer的任何想法?当我只有一个实例时,我能够显式构建APITransaction
对象,然后在MySerializer
上传递它,但是当我有多个内部json时,是不是自动执行此操作?
答案 0 :(得分:0)
永远不会调用APITransaction.create
您正在序列化数据。 create
只会在反序列化期间被调用,因此预计不会被调用。
请注意,list
是一种不应创建数据的安全方法。
Viewset
create
可能是你想要的。此外,您需要验证数据并保存序列化程序。
您应该特别浏览step 1 of the Django REST framework tutorial和working with serializer。