У меня есть родительский сериализатор, который содержит два дочерних сериализатора.Дочерние сериализаторы используются повторно, и у них есть логика для обновления и создания.
Мои данные запроса выглядят так:
{
'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
Таким образом, вложенные сериализаторы отлично проверяют данные.Теперь все, что я хочу сделать, это вызвать метод update внутри Key1Serializer
и создать метод внутри Key2Serializer
.
Я попытался назвать его ленивым способом,
serializer.data['key2'].create(params)
Но этоне правильный способ сделать это.Кто-нибудь может мне помочь?