Отправка строкового массива в качестве ответа с использованием DRF - PullRequest
0 голосов
/ 05 мая 2020

Я использую Django Rest Framework, и я хочу отправить массив строк в качестве ответа следующим образом:

['data2','data3']

Эти данные динамически генерируются из модели, в которой выбираются только значения, соответствующие ключу 'field1' с критерием фильтра 'field3'='type1' Если ниже приведены данные, которые я использую в моей модели:

[{
'field1':'data1',
'field2':'nodata1',
'field3':'type2'
},
{
'field1':'data2',
'field2':'nodata2'
'field3':'type1'
},
{
'field1':'data3',
'field2':'nodata3',
'field3':'type1'
}]

Я пробовал использовать Response (). И, используя это, я смог отправить строку, но не массив.

NB: я не хочу генерировать ответ JSON, как показано ниже.

    [{
        "field1": "data2"
    },
    {
        "field1": "data3"
    }]

1 Ответ

0 голосов
/ 05 мая 2020

Обновление ответа:

Этого можно добиться, используя базовый класс APIView. Ниже приведен пример кода:

  1. views.py:
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Label

class LabelList(APIView):
    def get(self, request):
        response = []
        labels = Label.objects.all()
        response = [label.field1 for label in labels]
        return Response(response)

------------ Старый ответ ----- --------

Используйте generics.ListAPIView , чтобы предоставить данные в массиве, и используйте сериализатор, чтобы иметь только field1.

Посмотрите пример кода .

  1. views.py:
# I am assuming your data to be a label, you can use any name for the class.
class LabelList(generics.ListAPIView):
    serializer_class = LabelSerializer

    def get_queryset(self):
        # For perform any filters based upon loggedin user
        return Label.objects.filter(owner=self.request.user)

serializers.py:
class LabelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Label
        fields = [
            'field1',
        ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...