2013-12-10 38 views
0

我是Django的新手,遇到了試圖將ValueQuerySet作爲JSON返回的問題。Django序列化ValueQuerySet

比方說,我有一個模型:

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來實現,那就太好了。

+0

嘗試'json.dumps(list(total))' –

回答

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') 
+0

謝謝!完美工作。我嘗試過使用DjangoJSONEncoder,但遺失了轉換爲列表的部分。 – wohlgejm