【问题标题】:Django QuerySet not serializableDjango QuerySet 不可序列化
【发布时间】:2014-02-04 09:10:35
【问题描述】:

我使用以下函数进行Ajax 调用:

 30 import json
 31
 32 def get_info(request):
 33    run = Run.objects.values('nvp_build', 'lports', 'lswitch_stt')
 34    measurements = Measurements.objects.values('maxfield')
 35    apistats = APIStats.objects.values('num')
 36    clusterdata = ClusterData.objects.values('memory_usage')
 37 
 38    response_data = json.dumps(run)
 39    return HttpResponse(response_data, mimetype='application/json')

所以当在我的views.py 中调用该方法时,我得到:

 [{'lports': 4056, 'nvp_build': u'31559', 'lswitch_stt': 2000}, 
     {'lports': 102, 'nvp_build': u'30194', 'lswitch_stt': 40}, 
     {'lports': 4056, 'nvp_build': u'31299', 'lswitch_stt': 2000}, 
     {'lports': 4056, 'nvp_build': u'31350', 'lswitch_stt': 2000}, 
     {'lports': 4056, 'nvp_build': u'31481', 'lswitch_stt': 2000}, 
     {'lports': 4056, 'nvp_build': u'31489', 'lswitch_stt': 2000}, 
     {'lports': 4056, 'nvp_build': u'31494', 'lswitch_stt': 2000}, 
     {'lports': 4056, 'nvp_build': u'31559', 'lswitch_stt': 2000}] 
   is not JSON serializable

但是,当我手动运行它并利用上述数组并执行json.dumps() 时,它可以工作... 有什么线索吗?

【问题讨论】:

  • 您是否在代码中使用json.dumps 并使用json.dump 手动测试它们不一样。
  • @RaydelMiranda 打错了......他们是一样的

标签: python ajax django json serialization


【解决方案1】:

使用django内置的serializers

from django.core import serializers
from django.http import HttpResponse   


def get_info(request):
    data = serializers.serialize('json', 
                                 Run.objects.all(), 
                                 fields=('nvp_build', 'lports', 'lswitch_stt'))
    return HttpResponse(data, content_type='application/json')

希望对您有所帮助。

【讨论】:

  • TypeError at /graphs/get_info __init__() got an unexpected keyword argument 'mimetype' ...不知道为什么我会收到这个错误
  • mimitype 实际上现在(django 1.6)已弃用。我已将其替换为content_type。但是,不确定为什么它不适用于mimetype。你有和我提供的一样的HttpResponse import 声明吗?
  • mimetype 关键字参数已被弃用一段时间。改用 content_type
猜你喜欢
  • 2017-06-18
  • 2019-06-17
  • 2020-03-04
  • 2019-11-05
  • 2014-12-10
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多