Django 响应错误 'unicode' 对象没有属性 '_meta' json
Django response error 'unicode' object has no attribute '_meta' json
我正在使用 django 1.11,我很难存储 Json response.Here 的 views.py 代码
views.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from .models import addinfomodels
from django.shortcuts import render, redirect
from django.http import HttpResponse, JsonResponse
from django.core import serializers
import json
# Create your views here.
def addinfo(request):
batch_year = [2016, 2017, 2018]
dept = ['AERO', 'BME', 'CIVIL', 'CSE', 'ECE', 'EEE', 'E&I', 'MECH']
type = ['onecredit', 'core', 'professional', 'openelective']
return render(request, "cbcsportal/addinfo.html", {'type': type, 'batch': batch_year, 'dept': dept})
def rollvalue(request):
return request.POST.get('rollno')
# d ={}
def jsonvalue(request):
d = {"courses":[{"choices": [request.POST.get('choices00') ,request.POST.get('choices10')], "code": request.POST.get('code0'), "name": request.POST.get('name10')}]}
ds = serializers.serialize('json', d)
print ds
return JsonResponse(ds, content_type="application/json", safe=False)
def posttodb(request):
if request.method == "POST":
data = addinfomodels()
data.batch = request.POST.get('batch')
data.dept = request.POST.get('dept')
data.typeid = request.POST.get('typeid')
data.type = request.POST.get('type')
data.rollno = [rollvalue(request)]
data.renderJSON = jsonvalue(request)
data.starttime = request.POST.get('starttime0')
data.endtime = request.POST.get('endtime0')
data.save()
return redirect('addinfo')
请帮我解决这个错误
'unicode' 对象没有属性 '_meta'
这是回溯
回溯:
回溯:
内部文件"C:\Python27\lib\site-packages\django\core\handlers\exception.py"
41.响应=get_response(请求)
文件 "C:\Python27\lib\site-packages\django\core\handlers\base.py" 在 _get_response
187.响应=self.process_exception_by_middleware(e,请求)
文件 "C:\Python27\lib\site-packages\django\core\handlers\base.py" 在 _get_response
185.响应=wrapped_callback(请求,*callback_args,**callback_kwargs)
posttodb 中的文件 "C:\Users\admin\Desktop\SREC_OBA\cbcsportal\views.py"
34. data.renderJSON = jsonvalue(请求)
文件"C:\Users\admin\Desktop\SREC_OBA\cbcsportal\views.py" jsonvalue
21. ds = serializers.serialize('json', d)
序列化中的文件 "C:\Python27\lib\site-packages\django\core\serializers__init__.py"
129.s.serialize(查询集,**选项)
序列化中的文件 "C:\Python27\lib\site-packages\django\core\serializers\base.py"
84.concrete_model=obj._meta.concrete_model
异常类型:/cbcs/posttodb 处的 AttributeError
异常值:'unicode' 对象没有属性“_meta”
这里:
d = {....}
ds = serializers.serialize('json', d)
#print ds
return JsonResponse(ds, content_type="application/json", safe=False)
您正在向 serialize()
传递指令。 Django 序列化程序用于序列化 Django 的 orm 查询集(这已记录在案,您可以通过阅读回溯找到答案)。
将 python 字典序列化为 json 的正确方法是使用 json.dumps(yourdict)
。但是:在您的情况下,这无论如何都是无用的,因为 JsonResponse
expects a python dict
as first argument 并且将负责序列化。您也不需要设置内容类型,它已经是 JsonResponse 的默认设置。 IOW,你只需要:
d = {....}
return JsonResponse(d, safe=False)
附带说明:此处:
def posttodb(request):
if request.method == "POST":
data = addinfomodels()
data.batch = request.POST.get('batch')
data.dept = request.POST.get('dept')
data.typeid = request.POST.get('typeid')
data.type = request.POST.get('type')
data.rollno = [rollvalue(request)]
data.renderJSON = jsonvalue(request)
data.starttime = request.POST.get('starttime0')
data.endtime = request.POST.get('endtime0')
data.save()
您在数据库中插入的数据是未经验证、未经处理的用户输入。不要那样做! (当然,除非您很高兴让您的服务器被第一个脚本小子入侵)。使用 Django 表单(在本例中 ModelForm
负责验证和清理。
我正在使用 django 1.11,我很难存储 Json response.Here 的 views.py 代码
views.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from .models import addinfomodels
from django.shortcuts import render, redirect
from django.http import HttpResponse, JsonResponse
from django.core import serializers
import json
# Create your views here.
def addinfo(request):
batch_year = [2016, 2017, 2018]
dept = ['AERO', 'BME', 'CIVIL', 'CSE', 'ECE', 'EEE', 'E&I', 'MECH']
type = ['onecredit', 'core', 'professional', 'openelective']
return render(request, "cbcsportal/addinfo.html", {'type': type, 'batch': batch_year, 'dept': dept})
def rollvalue(request):
return request.POST.get('rollno')
# d ={}
def jsonvalue(request):
d = {"courses":[{"choices": [request.POST.get('choices00') ,request.POST.get('choices10')], "code": request.POST.get('code0'), "name": request.POST.get('name10')}]}
ds = serializers.serialize('json', d)
print ds
return JsonResponse(ds, content_type="application/json", safe=False)
def posttodb(request):
if request.method == "POST":
data = addinfomodels()
data.batch = request.POST.get('batch')
data.dept = request.POST.get('dept')
data.typeid = request.POST.get('typeid')
data.type = request.POST.get('type')
data.rollno = [rollvalue(request)]
data.renderJSON = jsonvalue(request)
data.starttime = request.POST.get('starttime0')
data.endtime = request.POST.get('endtime0')
data.save()
return redirect('addinfo')
请帮我解决这个错误
'unicode' 对象没有属性 '_meta'
这是回溯
回溯:
回溯:
内部文件"C:\Python27\lib\site-packages\django\core\handlers\exception.py" 41.响应=get_response(请求)
文件 "C:\Python27\lib\site-packages\django\core\handlers\base.py" 在 _get_response 187.响应=self.process_exception_by_middleware(e,请求)
文件 "C:\Python27\lib\site-packages\django\core\handlers\base.py" 在 _get_response 185.响应=wrapped_callback(请求,*callback_args,**callback_kwargs)
posttodb 中的文件 "C:\Users\admin\Desktop\SREC_OBA\cbcsportal\views.py" 34. data.renderJSON = jsonvalue(请求)
文件"C:\Users\admin\Desktop\SREC_OBA\cbcsportal\views.py" jsonvalue 21. ds = serializers.serialize('json', d)
序列化中的文件 "C:\Python27\lib\site-packages\django\core\serializers__init__.py" 129.s.serialize(查询集,**选项)
序列化中的文件 "C:\Python27\lib\site-packages\django\core\serializers\base.py" 84.concrete_model=obj._meta.concrete_model
异常类型:/cbcs/posttodb 处的 AttributeError 异常值:'unicode' 对象没有属性“_meta”
这里:
d = {....}
ds = serializers.serialize('json', d)
#print ds
return JsonResponse(ds, content_type="application/json", safe=False)
您正在向 serialize()
传递指令。 Django 序列化程序用于序列化 Django 的 orm 查询集(这已记录在案,您可以通过阅读回溯找到答案)。
将 python 字典序列化为 json 的正确方法是使用 json.dumps(yourdict)
。但是:在您的情况下,这无论如何都是无用的,因为 JsonResponse
expects a python dict
as first argument 并且将负责序列化。您也不需要设置内容类型,它已经是 JsonResponse 的默认设置。 IOW,你只需要:
d = {....}
return JsonResponse(d, safe=False)
附带说明:此处:
def posttodb(request):
if request.method == "POST":
data = addinfomodels()
data.batch = request.POST.get('batch')
data.dept = request.POST.get('dept')
data.typeid = request.POST.get('typeid')
data.type = request.POST.get('type')
data.rollno = [rollvalue(request)]
data.renderJSON = jsonvalue(request)
data.starttime = request.POST.get('starttime0')
data.endtime = request.POST.get('endtime0')
data.save()
您在数据库中插入的数据是未经验证、未经处理的用户输入。不要那样做! (当然,除非您很高兴让您的服务器被第一个脚本小子入侵)。使用 Django 表单(在本例中 ModelForm
负责验证和清理。