【发布时间】:2017-01-15 23:03:10
【问题描述】:
我不知道如何序列化包含来自反向相关模型的字段的查询。我的模型看起来像这样。每张投票都与一张专辑相关联:
# models.py
class Album(models.Model):
name = models.CharField(max_length=50)
class Vote(models.Model):
album = models.ForeignKey(Album, on_delete=models.CASCADE)
user_vote = models.BooleanField(default=0)
我想做的是执行一个查询,返回所有专辑对象,以及归属于该专辑的投票总和。这很容易,但是当我序列化查询时,“total_votes”字段会丢失:
# views.py
# this works fine
query = Album.objects.annotate(total_votes = Sum(vote__user_vote))
# after serialization, I lose the field "total_votes"
serialized = serializers.serialize('json', list(query))
return serialized
不幸的是,“total_votes”字段没有出现在序列化结果中,因为根据 Django 文档,“只有模型上本地定义的字段才会被序列化。”
所以我的问题是,我如何获得以下序列化结果(假设 Abbey Road 有 100 票,Astral Weeks 有 150 票)?任何帮助将不胜感激。
[
{
"pk": 1,
"model": "app.album",
"fields": {
"name": "Abbey Road",
"total_votes": 100
},
{
"pk": 2,
"model": "app.album",
"fields": {
"name": "Astral Weeks",
"total_votes": 150
},
...
]
【问题讨论】:
标签: django serialization django-models django-views