首页 > 解决方案 > Django Rest Framework:动态更改嵌套对象

问题描述

我正在使用GenericForeignKeyand ContentTypes,如何动态更改 DRF 序列化程序中的嵌入对象?

例如:

class FooObjectSerializer(serializers.ModelSerializer):
    """
    Represents every foo object
    """

    # 'bar=BarSerializer' if content_type is for Bar model.
    # 'baz=BazSerializer' if content_type is for Baz model.

    class Meta:
        model = models.StoreObject
        fields = ['id', 'content_type', 'object_id', 'content_object']

标签: djangodjango-modelsdjango-rest-framework

解决方案


你可以做

class FooObjectSerializer(serializers.ModelSerializer):
    # skipped

    def __init__(self, *args, **kwargs):
        super(FooObjectSerializer, self).__init__(*args, **kwargs)
        if self.instance:
            if isinstance(self.instance.content_object, Bar):
                self.fields['content_object'] = BarSerializer()
            # adjust these checks as you may wish

推荐阅读