Прикрепите метаданные для json, которые возвращает остальная структура - PullRequest
1 голос
/ 08 февраля 2020

У меня есть модель с именем station, и я сделал API в соответствии с django rest framework.

class Station(models.Model):
    filter_class = StationFilter
    name = models.CharField(unique=True,max_length=255)
    def __str__(self):
        return self.name

class StationSerializer(serializers.ModelSerializer):
    class Meta:
        model = Station
        fields = ('id','name')

class StationViewSet(viewsets.ModelViewSet):
    queryset = Station.objects.all()
    serializer_class = StationSerializer

Теперь он возвращает Json, как это соответствует столбцам таблицы.

{
    [ 
        {id: 1,name:"station1"},
        {id: 2,name:"station2"}
    ]
}

Однако я хочу прикрепить метаданные для этого Json следующим образом.

{
    meta : {'time':"2020-02-02 00:00:00:",'apiName:"myapi"},
    items :[ 
        {id: 1,name:"station1"},
        {id: 2,name:"station2"}
    ]
}

Возможно ли это? или как мне это сделать ??

1 Ответ

3 голосов
/ 08 февраля 2020

вам необходимо переопределить метод list вашего ViewSet:

class StationViewSet(viewsets.ModelViewSet):
    ...

    def list(self, request, *args, **kwargs):
        custom_data = {
            'list_of_items': StationSerializer(self.get_queryset(), many=true).data  #     this is the default result
        }
        custom_data.update({
            'meta': #your extra data
        })
        return Response(custom_data)

Обновление:

Когда вы добавили фильтрацию в ModelViewSet , вы должны сделать что-то вроде этого:

def list(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())
    custom_data = {
        'list_of_items': self.get_serializer(queryset, many=True).data
    }
    custom_data.update({
        'meta': #your extra data
    })
    return Response(custom_data)
...