Сериализатор Django и REST API различных производных классов

Я решаю эквивалентную задачу следующей. Мне нужно сериализовать модели django, которые имеют следующие критерии:

  • Базовый (абстрактный) класс из модели django, содержащий поле «тип», в котором я могу хранить тип товаров (например, фрукты, одежду...)
  • Производные классы для разных типов товаров (фрукты имеют вес, одежда имеет цвет)

Я хотел бы сериализовать (в JSON) список любых товаров для фреймворка REST API. Я не знаю, как лучше всего использовать возможности фреймворка для проверки сериализованных объектов и т.д.


person majvan    schedule 01.11.2017    source источник


Ответы (1)


Вы можете определить сериализатор, который будет объединять два или более сериализатора вместе на основе модели:

class Model1Serializer(serializers.Serializer):
    ...

class Model2Serializer(serializers.Serializer):
    ...

class SummarySerializer(serializers.Serializer):
    """ Serializer that renders each instance with its own specific serializer """

    @classmethod
    def get_serializer(cls, model):
        if model == Model1:
            return Model1Serializer
        elif model == Model2:
            return Model2Serializer

    def to_representation(self, instance):
        serializer = self.get_serializer(instance.__class__)
        return serializer(instance, context=self.context).data

Это будет работать для любых моделей, а не только для детей одного класса. исходный ответ здесь, на который ответил zymud 19 января 14 :52.

person Ykh    schedule 01.11.2017