私は、Python 2.7.11+でDRF:非モデルシリアライザは、非モデルクラスでは動作しません
をdjangorestframeworkの== 3.3.2を使用しています、私は、このクラスのインスタンスを表す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 TransactionView(viewsets.ViewSet):
serializer_class = MySerializer # probably useless
def list(self, request):
# ...
serializer = MySerializer(list_of_json, many=True)
return Response(serializer.data)
:
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
は今、私はからそのシリアライザを使用しようとしています
list_of_json
は、APITransaction
クラスを表すjsonのリストです。
は、残念ながら、私はAPITransaction.create
は、このように呼ばれることはありませんAPITransaction.__init__
内部parser.parse
は、文字列をキャストするために使用されることはありませんという事実によって引き起こさ'unicode' object has no attribute 'isoformat'
エラーを取得しています。
私はこれがシリアライザの正しい方法ではないことを知っていますが、DRMドキュメントでは、ORM以外のクラスを使用しているときに何をすべきかについて何も言及していません。
どのようにシリアライザを使用することができますか?インスタンスが1つしかない場合は、APITransaction
オブジェクトを明示的に作成してMySerializer
に渡すことができますが、複数のjsonがある場合、それを自動的に行う方法ではありませんか?
実際に私は、データをシリアル化しています。使用する必要があるのは、呼び出すために作成するために、 'serializer.save()'でした。 – chefarov
これ以上のものが必要です:呼び出しis_valid、保存、* NOT * validated_dataまたはsaveの結果)。 – Linovia