在Django中,当从AJAX视图发送响应时,如何用JSON呈现查询集字段的字段



我将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(文章("及其数字主键返回,例如

"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是绝对必须具备的工具。

最新更新