【发布时间】:2019-06-15 02:12:42
【问题描述】:
我有一个包含两个子序列化程序的父序列化程序。子序列化器被重复使用,它们具有更新和创建的逻辑。
我的请求数据是这样的,
{
'key1': [
{'keyA': value},
{'keyA': value}
]
'key2': [
{'keyB': value},
{'keyB': value}
]
}
这些是我写的序列化器,
class ParentSerializer(serializers.Serializer):
key1 = Key1Serializer(many=True)
key2 = Key2Serializer(many=True)
class Meta:
...
子序列化器,
class Key1Serializer(serializers.ModelSerializer):
keyA = serializers.CharField(required=True)
class Meta:
model = Key1
fields = ('keyA')
list_serializer_class = MultipleKey1Serializer
class Key1Serializer(serializers.ModelSerializer):
keyB = serializers.CharField(required=True)
class Meta:
model = Key2
fields = ('keyB')
list_serializer_class = MultipleKey2Serializer
列出序列化程序,
class MultipleKey1Serializer(serializers.ListSerializer):
def update(self, extra_params):
for el in self.validated_data:
... #update logic
class MultipleKey2Serializer(serializers.ListSerializer):
def create(self, extra_params):
for el in self.validated_data:
... #create logic
这就是我初始化父序列化程序的方式
serializer = ParentSerializer(data=request_data)
serializer.is_valid() # <- works perfectly, validates all the fields
因此嵌套的序列化程序可以完美地验证数据。现在我要做的就是在Key1Serializer 中调用update 方法并在Key2Serializer 中调用create 方法。
我试着用懒惰的方式来称呼它,
serializer.data['key2'].create(params)
但这不是正确的做法。谁能帮帮我?
【问题讨论】:
-
那么当您尝试以这种方式调用它时是否遇到任何错误?错误是什么?
-
serializer.data['key2'] 返回验证数据列表。所以在列表中调用
.create(params)会给出错误list object does not have 'create'...
标签: python django python-3.x django-rest-framework django-serializer