2016-03-28 3 views
0

Я использую среду Django REST для создания API. Я хотел бы добавить данные из более чем одной модели в сериализованный вывод.Добавить дополнительные данные в данные модели, возвращаемые сериализатором Django

На данный момент мой serialiser выглядит следующим образом:

class ItemSerializer(serializers.HyperlinkedModelSerializer): 
 
    class Meta: 
 
     model = Item 
 
     fields = ('url', 'owner', 'item_type')

Я хотел бы добавить

item_cost

значение фр om my Costs для сериализованного вывода (другая стоимость для каждого элемента в модели Item). Я также хотел бы добавить значение временной метки unix для сериализованного выхода (одно значение, которое будет помещено в конец всего другого сериализованного выхода).

Мой serialiser используется в представлении следующим образом:

class ItemViewSet(viewsets.ModelViewSet): 
 
    queryset = Item.objects.all().order_by('-date_added') 
 
    serializer_class = ItemSerializer

Я не могу работать, как добавить другие элементы данных в последовательную форму вывода.

ответ

2

Вы можете использовать SerializerMethodField из rest_framework.serializers и создать метод, который возвращает значение, которое вы ищете, например:

class ItemSerializer(serializers.HyperlinkedModelSerializer): 
    cost = serializers.SerializerMethodField() 

    def get_cost(self, obj): 
     value = ... # calculate your value 
     return value 

    class Meta: 
     model = Item 
     fields = ('url', 'owner', 'item_type', 'cost') 

Ссылка в документации: http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

+0

Это идеально Густаво! Есть ли способ получить доступ к параметрам запроса из вызывающего url в функции get_cost, чтобы я мог выполнить действие, зависящее от запроса? –

+1

Да, вы можете. Изнутри метода вы можете получить доступ к 'QueryDict':' self.context.get ('request'). Query_params' –

+1

Отличное спасибо! –

Смежные вопросы