我有postgresql(和postgis)的空间查询。我使用raw()函数。所以我有这样的事情:
observations = Square.objects.raw('SELECT validation_birds_square.id AS id,
validation_birds_square.identification,
Count(validation_birds_checklist.position) AS total
FROM validation_birds_square ...the rest of sql query...')
我使用了我在models.py中定义的Square模型。然后我想序列化观察,所以我这样做:
return HttpResponse(serializers.serialize("json", observations), content_type='application/json')
但这是问题所在。它仅序列化Square模型的属性,而不是来自sql查询的 total 。
当我迭代观察时,我可以得到这个值:
for observation in observations:
print(observation.total)
有没有更好的方法如何将 total 置于序列化JSON而不是迭代观察并手动将其序列化为JSON?
答案 0 :(得分:1)
您没有正确的查询集,因此使用内置序列化程序没有多大意义。只需创建一个dicts列表,并使用JsonResponse将其作为JSON返回。
data = [{'id': o.id, 'identification': o.identification, 'total': o.total} for o in observations]
return JsonResponse(data)