我想逐字地向查询集对象添加一个字符串。为什么,因为我将它发送给JSON,只需将信息放在那里并使其可用,而不必迭代查询集将其转换为自定义字典,这将是如此美好和干净。
我现在拥有的:
a_vote_set.aggregate(
count = Count('id'),
avg=Avg('score'),
std=StdDev('score'),
sum=Sum('score'),
)
这让我知道了:
{"count": 1, "std": 0.0, "sum": -4.0, "avg": -4.0}
我想得到的是:
{"count": 1, "std": 0.0, "sum": -4.0, "avg": -4.0, "additional_value": "name of candidate"}
我希望通过这样的方式来获得:
a_vote_set.aggregate(
count = Count('id'),
avg=Avg('score'),
std=StdDev('score'),
sum=Sum('score'),
additional_value=Literal(candidate.name),
)
or this:
a_vote_set.aggregate(
count = Count('id'),
avg=Avg('score'),
std=StdDev('score'),
sum=Sum('score')
).append(
additional_value=str(candidate.name),
)
关于这是否可行的任何想法?
答案 0 :(得分:2)
您可以使用Value添加文字值:
a_vote_set.aggregate(
count = Count('id'),
avg=Avg('score'),
std=StdDev('score'),
sum=Sum('score')
).annotate(
additional_value=Value(candidate.name, output_field=CharField()),
)
答案 1 :(得分:-1)
您可以使用.extra()之类的内容:
a_vote_set.aggregate(
count = Count('id'),
avg=Avg('score'),
std=StdDev('score'),
sum=Sum('score'),
).extra(
select={
'additional_value' : 'candidate_table.name'
},
where=['candidate_table.id = vote_table.candidate_id']
)
您也可以将Q()和F()值传递给select,但我不确定。