Динамически выбираемый вложенный сериализатор - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть Kit модель и Product, что связано с Kit с внешним ключом.Также есть несколько сериализаторов для продукта - ProductASerializer и ProductBSerializer.

class KitSerializer(serializers.ModelSerializer):
    products = ProductASerilaizer(many=True)

    class Meta:
        model = Kit
        fields = ['type', 'products', ...]

Как динамически выбрать сериализатор для продукта, в зависимости от типа комплекта.Например, если type == 1, я использую сериализатор A, а еще B. Так, наконец, это может быть Kit с несколькими сериализаторами какого типа внутри.Спасибо!

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете использовать SerializerMethodField ссылку и выбрать там serailizer.

class KitSerializer(serializers.ModelSerializer):
    products = serializers.SerializerMethodField()

    class Meta:
        model = Kit
        fields = ['type', 'products', ...]
    def get_products(self, obj):
         if obj.type == 'A':
             return ProductASerilaizer(obj.products, many=True).data
         else:
              ....
...