В Django как отобразить поля полей из набора запросов в JSON при отправке ответа из представления AJAX? - PullRequest
0 голосов
/ 18 марта 2020

Я использую Django 2 с Python 3.7. На мой взгляд, у меня есть этот код для отправки JSOn на AJAX вызов ...

articlestat_query = ArticleStat.objects.get_stats()
...
data = {
    'articlestat': serializers.serialize('json', list(articlestat_query)),
    ...
}
return JsonResponse(data)

Запрос "articlestat_query" извлекает модели, которые выглядят следующим образом ...

class ArticleStat(models.Model):
    objects = ArticleStatManager()
    article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='articlestats')
    elapsed_time_in_seconds = models.IntegerField(default=0, null=False)
    score = models.FloatField(default=0, null=False)

Проблема в том, что когда генерируется мой JSON, часть «article» возвращается как «article» и его первичный ключ numberri c, например,

"article": 12345678

Как настроить мой сериализация, так что JSON этого поля отображается вместо его первичного ключа. IOW JSON будет

"article": {"title": "hello world", "author": "George Costanza" ...

1 Ответ

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

Что ж, лучший способ - использовать Django сериализаторы Rest Framework. Взгляните на ModelSeriazer

В вашем случае статья будет представлена ​​в виде другого ModelSerializer, например:

class ArticleSerializer(ModelSerializer):
    class Meta:
        model = Article
        fields = ('title', 'author'...)


class ArticleStatSerializer(ModelSerializer):
    article = ArticleSerializer()

    class Meta:
        model = ArticleStat
        fields = ('article', ...)


...
articlestat_query = ArticleStat.objects.get_stats().prefetch_related('article')
...
data = {
    'articlestat': ArticleStatSerializer(articlestat_query, many=True).data,
    ...
}
return JsonResponse(data)

DRF абсолютно должен иметь инструмент.

...