Django Rest Framework: динамическое изменение вложенного объекта - PullRequest
0 голосов
/ 22 февраля 2020

Я использую GenericForeignKey и 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']

1 Ответ

0 голосов
/ 22 февраля 2020

Вы можете сделать

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
...