В Django, как мне сделать JSON с заданным OrderedDict? - PullRequest
0 голосов
/ 25 марта 2020

Я использую Django и Python 3.7. У меня проблемы с возвратом JSON с одного из моих взглядов. У меня есть этот код вида ...

def get_hints(request):
    article_id = request.GET.get('article_id', None)
    article = Article.objects.get(pk=article_id)
    s = ArticlesService()
    objects = s.get_hints(article)
    data = ArticleSerializer(objects, many=True).data
    print("data: ", data)
    return HttpResponse(data, content_type="application/json")

Указанный метод обслуживания возвращает следующие данные ...

def get_hints(self, article):
    ...
    sorted_articles_map = OrderedDict(sorted(rank_map.items(), key=operator.itemgetter(1), reverse=True))
    return list(sorted_articles_map.keys())

Данные, возвращаемые из сериализатора, выглядят так, определенно нет json ...

[OrderedDict([('id', 10777935), ('created_on_ms', 1577985486000.0), ('label', 'World'), ('title', "Outrage and Disgust After 'Serial Killer' ..., 

Как правильно отобразить JSON?

Редактировать: Добавление сериализатора статей ...

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ['id', 'created_on_ms', 'label', 'title', 'mobile_path', 'path', 'url', 'is_media', 'checked_for_dup', 'original_path', 'is_spiked']

1 Ответ

0 голосов
/ 28 марта 2020

Опция 1

Используйте @api_view() - (drf do c) декоратор DRF вместе с Response - (drf do c) класс

<b>from rest_framework.decorators import api_view
from rest_framework.response import Response


@api_view(['GET'])</b>
def get_hints(request):
    article_id = request.GET.get('article_id', None)
    article = Article.objects.get(pk=article_id)
    s = ArticlesService()
    objects = s.get_hints(article)
    data = ArticleSerializer(objects, many=True).data
    <b>return Response(data)</b>

Опция 2

Аналогичный ответ вы получите, набрав JsonResponse - (django до c)

<b>from django.http.response import JsonResponse</b>


def get_hints(request):
    article_id = request.GET.get('article_id', None)
    article = Article.objects.get(pk=article_id)
    s = ArticlesService()
    objects = s.get_hints(article)
    data = ArticleSerializer(objects, many=True).data
    <b>return JsonResponse(data, safe=False)</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...