use*_*771 2 python django serialization json python-3.x
我正在使用DJango 1.8和Python 3.4
当运行以下视图时,Django抛出类型错误 - 对象不是JSON Serializable
Views.py
from django.http import HttpRequest,HttpResponse
from django.http import JsonResponse
from json import dumps
def get_stats(request):
if request.method == "POST":
srch_dropV = request.POST['srch_dropAJ']
else:
srch_dropV = ''
if(srch_dropV == 'Green'):
students = GreenBased.objects.all()
if(srch_dropV == 'Yellow'):
students = YellowBased.objects.all()
response_data = {}
try:
response_data['result'] = 'Success'
response_data['message'] = list(students)
except:
response_data['result'] = 'Ouch!'
response_data['message'] = 'Script has not ran correctly'
return HttpResponse(JsonResponse(response_data), content_type="application/json")
Run Code Online (Sandbox Code Playgroud)
我正在尝试从mysql数据库中读取几行并将其显示在html文件中,当我正在运行上面的视图时,我正面临下面的错误消息
TypeError: YellowBased: YelloBased object is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
在HTML页面中,我有一个下拉列表..基于所选的选项,我的Ajax会返回从mysql表中获取的记录.
Models.py
class GreenBased(models.Model):
NumOfStudents = models.CharField(max_length=300,blank=True)
Green = models.CharField(max_length=300,blank=True)
class Meta:
managed = False
db_table = "GreenStats"
class YelloBased(models.Model):
NumOfStudents = models.CharField(max_length=300,blank=True)
Yellow = models.CharField(max_length=300,blank=True)
class Meta:
managed = False
db_table = "YellowStats"
Run Code Online (Sandbox Code Playgroud)
GreenStats和YellowStats表在mysql中只包含2*2行有人可以帮我识别这个问题吗?
你必须序列化你的student对象列表,尝试这样的事情:
from django.http import HttpRequest,HttpResponse
from django.http import JsonResponse
from json import dumps
from django.core import serializers
def get_stats(request):
if request.method == "POST":
srch_dropV = request.POST['srch_dropAJ']
else:
srch_dropV = ''
if(srch_dropV == 'Green'):
students = GreenBased.objects.all()
if(srch_dropV == 'Yellow'):
students = YellowBased.objects.all()
response_data = {}
try:
response_data['result'] = 'Success'
response_data['message'] = serializers.serialize('json', students)
except:
response_data['result'] = 'Ouch!'
response_data['message'] = 'Script has not ran correctly'
return JsonResponse(response_data)
Run Code Online (Sandbox Code Playgroud)
注意换行:
response_data['message'] = serializers.serialize('json', students)
也是JsonResponse自己的技巧,所以不需要包装它HttpResponse.
检查文档以获得更多自定义:https: //docs.djangoproject.com/en/1.8/topics/serialization/
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
20173 次 |
| 最近记录: |