在 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绝对是必备工具
我在 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绝对是必备工具