Ожидается JSON объект вместо JSON Array - PullRequest
0 голосов
/ 20 апреля 2020

В моем приложении django с ядром базы данных djon go я пытаюсь вернуть ответ JSON путем получения из моей базы данных. Но я получаю массив JSON вместо JSON объекта. В настоящее время в моей базе данных есть только одна запись. Пожалуйста, смотрите код ниже.

model.py

class bloodDonors(models.Model):
location=models.CharField(max_length=20)
name=models.CharField(max_length=20)
phone=models.IntegerField()
address=models.TextField()
bloodGroup=models.CharField(max_length=5)
type=models.CharField(max_length=20)
def __str__(self):
    return self.name

views.py

class bloodDonersView(viewsets.ModelViewSet):
    queryset = bloodDonors.objects.all()
    serializer_class = bloodDonorsSerializer

JSON Ответ:

[
    {
        "id": 3,
        "location": "Delhi",
        "name": "Tony",
        "phone": 888,
        "address": "South street",
        "bloodGroup": "B+",
        "type": "blood-donation"
    }
]

Но на самом деле мне нужен был ответ, приведенный ниже:

{
    "id": 3,
    "location": "Delhi",
    "name": "Tony",
    "phone": 888,
    "address": "South street",
    "bloodGroup": "B+",
    "type": "blood-donation"
}

1 Ответ

0 голосов
/ 21 апреля 2020

Звучит так, как будто вы используете конечную точку 'list', которая извлекает все объекты, соответствующие набору запросов, но вы хотите использовать конечную точку retrieve детализации, где вы просто получаете один объект. Хорошая новость заключается в том, что, поскольку вы используете набор моделей, вы бесплатно получаете конечную точку retrieve GET. Все, что вам нужно сделать, это передать pk объекта, который вы хотите, как часть URL-адреса, и он вернет только один запрошенный вами объект.

Так что, если ваш URL-адрес в настоящее время:

/api/v1/blood-donors

вы хотите использовать URL:

/api/v1/blood-donors/3

, чтобы получить только один нужный вам объект (с pk=3). Конечная точка GET без /{PK} в конце всегда будет возвращать список, даже если в вашей базе данных есть только один объект, и если вы добавите pk к URL, вы всегда получите только один объект назад , объект, который соответствует pk, который вы передаете.

Обновление, чтобы ответить на ваш вопрос в комментарии. Новый метод будет выглядеть примерно так:

class bloodDonersView(viewsets.ModelViewSet):
    queryset = bloodDonors.objects.all()
    serializer_class = bloodDonorsSerializer

    @action(detail=False, methods=['get',], url_path='first')
    def get_first_object(self, request):
        object = bloodDonors.objects.first()
        serializer = bloodDonorsSerializer(object, many=False)
        return response.Response(serializer.data)

URL-адрес, который вы будете использовать:

api/v1/blood-donors/first

, и вам нужно проверить документацию о том, куда импортировать ответ и декоратор действий.

...