如何将sql查询中的count()序列化为JSON

时间:2017-02-07 15:27:31

标签: json django serialization django-models

我有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?

1 个答案:

答案 0 :(得分:1)

您没有正确的查询集,因此使用内置序列化程序没有多大意义。只需创建一个dicts列表,并使用JsonResponse将其作为JSON返回。

data = [{'id': o.id, 'identification': o.identification, 'total': o.total} for o in observations]
return JsonResponse(data)