动态选择的嵌套串行器

时间:2019-02-08 16:06:24

标签: django django-rest-framework

我有Kit模型和与外键与Product相关的Kit。另外,还有几种针对产品的序列化程序-ProductASerializerProductBSerializer

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

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

如何根据套件的类型为产品动态选择串行器。例如,如果type == 1我使用序列化器A,否则使用B。所以最终它可以是Kit,其中包含几种类型的序列化器。谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用SerializerMethodField link并在那里选择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:
              ....