Django REST framework POST запрос с динамическим полем внутри вложенного поля с использованием сериализатора

Я хочу отправить POST-запрос в API с двумя различными выборками данных, как показано ниже.

Данные POST имеют различную схему в ключе options в зависимости от ключа choice. Ключи внутри ключа options отличаются, за исключением нескольких общих полей.

Я хочу также проверять поля с помощью Serializer. Как я могу это решить?

Случай 1

{
  "name": "name1",
  "options": {
    "choice": "choice1",
    "common_option1": value1,
    "common_option2": value2,
    "choice1_option1": value3,
    "choice1_option2": value4
  }
}

Случай 2

{
  "name": "name2",
  "options": {
    "choice": "choice2",
    "common_option1": value5,
    "choice2_option1": value6,
    "choice2_option2": value7,
    "choice2_option3": value8
  }
}

Вы можете переопределить метод update на вашем сериализаторе:

class MyModelSerializer(serializers.ModelSerializer):

    ...
        
    def update(self, instance, validated_data):
        
        # unpack options from initial data:
        options = self.initial_data['options']

        # option 1:
        if options['choice'] == 'choice1':
            # do something

        # option 2:
        elif options['choice'] == 'choice2':
            # do something else
        
        return super().update(instance, validated_data)
Вернуться на верх