Django Serialize ValueQuerySet

时间:2013-12-10 18:09:16

标签: python django json

我是Django的新手,我遇到了试图将ValueQuerySet作为JSON返回的问题。

假设我有一个模特:

class Poll(models.Model):
    date = models.DateTimeField()

我希望得到一个约会的投票计数,所以我使用:

total = models.Poll.objects.extra({'date': "DATE(date)"}).values('date').annotate(total=Count('id'))

这给出了一个ValueQuerySet。我想将此作为JSON响应返回。

以下是我的观点:

def get_total(request):
    total= models.Poll.objects.extra({'date': "DATE(date)"}).values('date').annotate(total=Count('id'))
    for i in total: #Convert datetime.date object to string
        i['date'] = str(i['date'])
    return HttpResponse(json.dumps(total), content_type='application/json')

我收到此错误:

[{'date': '2013-12-02', 'total': 1}, {'date': '2013-12-03', 'total': 2}] is not JSON serializable

任何有关如何设置此建议的建议将不胜感激。我也在使用Tastypie来设置API。如果使用Tastypie可以实现这一点,那就太好了。

1 个答案:

答案 0 :(得分:2)

您需要将查询集转换为列表以将其序列化。 如果您使用DjangoJSONEncoder,则无需转换自己的日期。

from django.core.serializers.json import DjangoJSONEncoder
def get_total(request):
    total= models.Poll.objects.extra({'date': "DATE(date)"}).values('date').annotate(total=Count('id'))
    return HttpResponse(json.dumps(list(total), cls=DjangoJSONEncoder),content_type='application/json')