我是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可以实现这一点,那就太好了。
答案 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')