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