Я использую вложенные сериализаторы и успешно переопределил метод create для сохранения в моделях. Теперь я должен сделать то же самое для метода put, переопределив метод update.Я получаю ошибки вроде:
key error for 'short_name'
Мой сериализатор:
class WorkflowSerializer(serializers.ModelSerializer):
levels = WorkflowLevelSerializer(many=True)
class Meta:
model = Workflow
fields = ('name', 'description', 'levels')
def create(self, validated_data):
levels = validated_data.pop('levels')
workflow = Workflow.objects
.create(**validated_data,tenant=self.context['request'].user.tenant)
for index, level in enumerate(levels):
level_var = WorkflowLevel()
level_var.workflow = workflow
level_var.level = level['level']
level_var.operation=level['operation']
level_var.save()
for permission in self.initial_data['levels'][index]
['workflow_permissions']:
permission_obj = WorkflowPermission.objects
.filter(short_name=permission['short_name']).first()
workflowlevelpermission = WorkflowLevelPermission()
workflowlevelpermission.level = level_var
workflowlevelpermission.permission=permission_obj
workflowlevelpermission.save()
return workflow
def update(self, instance, validated_data):
print(validated_data)
levels = validated_data.get('levels')
instance.name = validated_data.get('name', instance.name)
instance.desciption = validated_data.get('description',
instance.description)
instance.tenant = self.context['request'].user.tenant
print("LEVELS",levels)
for index, level in enumerate(levels):
level_var =
WorkflowLevel.objects.filter(workflow=instance).first()
level_var.level = level['level']
level_var.operation=level['operation']
level_var.save()
print("Workflow Permissions",validated_data['levels'][index]
['workflow_permissions'])
for permission in validated_data['levels'][index]
['workflow_permissions']:
permission_obj = WorkflowPermission.objects
.filter(short_name=permission['short_name']).first()
workflowlevelpermission = WorkflowLevelPermission()
workflowlevelpermission.level = level_var
workflowlevelpermission.permission=permission_obj
workflowlevelpermission.save()
return instance
Может кто-нибудь предложить правильный способ написания этого метода обновления?