Объектный объект JSON-ответ от бэкэнда Django на интерфейс React-Redux - PullRequest
0 голосов
/ 01 декабря 2018

Это ответ от Django при вызове axios api во внешнем интерфейсе (массив объектов JSON).

[
    {
        "id": 1,
        "title": "How to create a django-react app",
        "body": "You should first do this stuff and that"
    },
    {
        "id": 5,
        "title": "How to connect django with react",
        "body": "Get this and that stuff"
    }
]

Но это ответ, который я хочу (объект JSON объектов JSON).Является ли словарь Python таким же, как объект Javascript или Hashmap?Есть ли какое-то промежуточное программное обеспечение, которое я могу использовать для преобразования формы?Это работа, которую должен выполнять serializers.py или views.py?Как я могу изменить ответ из массива объектов на объект или объекты?

{
    1: {
        "id": 1,
        "title": "How to create a django-react app",
        "body": "You should first do this stuff and that"
    },
    5: {
        "id": 5,
        "title": "How to connect django with react",
        "body": "Get this and that stuff"
    }
}

serializers.py

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = '__all__'

views.py

class ArticleViewSet(ViewSet):
    queryset = Article.objects.all()

    def list(self, request):
        serializer = ArticleSerializer(ArticleViewSet.queryset, many=True)
        return Response(serializer.data)

    def retrieve(self, request, pk=None):
        article = get_object_or_404(ArticleViewSet.queryset, pk=pk)
        serializer = ArticleSerializer(article, many=False)
        return Response(serializer.data)

1 Ответ

0 голосов
/ 01 декабря 2018

Вы должны иметь возможность построить словарь в методе ArticleViewSet list:

class ArticleViewSet(ViewSet):
    queryset = Article.objects.all()

    def list(self, request):
        serializer = ArticleSerializer(ArticleViewSet.queryset, many=True)
        return Response({article['id']: article for article in serializer.data})

    def retrieve(self, request, pk=None):
        # ...
...