在 Django 中,当从 AJAX 视图发送响应时,如何渲染 JSON 中查询集中的字段?

In Django, how do I render fields of fields from a queryset in JSON when sending a response from an AJAX view?

我在 Python 3.7 中使用 Django 2。在我看来,我有这段代码可以将 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" 及其数字主键返回,例如

"article": 12345678

如何配置序列化以便呈现该字段的 JSON 而不是其主键。 IOW,JSON 将是

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

最好的方法是使用 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绝对是必备工具