Как вернуть пользовательскую JSON структуру в Django Rest Framework для нескольких моделей - PullRequest
2 голосов
/ 19 января 2020

Я работаю над проектом, и я застрял в API регистрации. Или я должен переопределить drf_multiple_models?. Я получаю этот ответ от представлений, которые я предоставил, и я не хочу ответа, подобного этому:

{
"message": "success",
"code": 200,
"country": [
    {
        "country_name": "nepal",
        "country_code": "977"
    }
],
"postal code": [
    {
        "post_code": 105
    }
],
"suburb": [
    {
        "suburb_name": "damak"
    }
],
"state": [
    {
        "state_name": "india1"
    }
]
}

но мне нужен такой ответ:

{
"message": "success",
"code": 200,
"country": [
        {
        "country_name": "nepal",
        "country_code": "977"
        }
        "postal code":
            {
                "post_code": 105
            }
        "suburb":
            {
                "suburb_name": "damak"
            }
        "state":
            {
                "state_name": "india1"
            }
        }]

вот мои взгляды:

class InformationList(APIView):
    def get(self, request):
        country=self.request.query_params.get('country')
        post = self.request.query_params.get('post')
        city = self.request.query_params.get('city')
        state = self.request.query_params.get('state')

        query1 = Country.objects.filter(country_code=country).values('country_name', 'country_code')
        query2 = Post.objects.filter(post_code=post).values('post_code')
        query3 = Suburb.objects.filter(suburb_name=city).values('suburb_name')
        query4 = State.objects.filter(state_name=state).values('state_name')

        return Response({"message": "success", "code":status.HTTP_200_OK,"country": query1, "postal code": query2, "suburb": query3,
                     "state": query4})

нужна помощь. заранее спасибо

Ответы [ 2 ]

1 голос
/ 19 января 2020

Ваши запросы верны, все, что вам нужно сделать, это изменить ответ,

 Response({"message": "success", "code":status.HTTP_200_OK,"country": query1[0], "postal code": query2[0], "suburb": query3[0],
                     "state": query4[0]})

Основная причина, по которой вам нужно изменить свой ответ, заключается в том, что набор запросов с использованием фильтра создает списки объектов. Если вам не нужен список вокруг объектов, используйте 'get ()'

1 голос
/ 19 января 2020

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

dict = {}
dict['countries'] = query1, query2, query3, query4
return Response(dict)

и вызвать dict в качестве ответа. это может работать, так как на данный момент вы вызываете каждый ответ независимо, и они отображаются в указанном порядке, который показывает ваш вывод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...