我有这些方法:
def get_all_from_database():
urls = Url.objects.all()
ips = Ip.objects.all()
context = {
'urls': serializers.serialize('json', urls),
'ip': serializers.serialize('json', ips)
}
return context
以及使用ajax发送数据的方法:
def send_results(request):
if request.is_ajax():
address = request.POST.get('url')
process_data(address, email_to, email_from)
context = get_all_from_database()
return HttpResponse(json.dumps(context), content_type='application/json')
但这会引发错误:INTERNAL SERVER ERROR 500'dict'对象没有属性'_meta'。 那个错误,以及如何纠正它?
答案 0 :(得分:2)
您无法将serializers.serialize
方法用于values
来自<{1}}的词典列表:
urls = Url.objects.all().values('address', 'cnt')
使用默认查询集:
urls = Url.objects.all()
ips = Ip.objects.all()
答案 1 :(得分:1)
urls = Url.objects.all().values('address', 'cnt')
ips = Ip.objects.all().values('address', 'cnt')
以上行返回dict
个对象,请尝试:
urls = Url.objects.all().values('address', 'cnt').values_list()
ips = Ip.objects.all().values('address', 'cnt').values_list()
然后您将urls
作为包含元组的列表:
[(address_1, cnt_1), (address_2, cnt_2), ...]
答案 2 :(得分:1)
您的示例context['urls']
值已经采用json
格式,并且您无法将json.dumps()
用于json数据。
您可以使用此示例:
json.dumps({
'urls': Urls.objects.all().values_list('address', 'cnt'),
'ips': Ip.objects.all().values_list('address', 'cnt')
}), 'json')
答案 3 :(得分:0)
我认为应该是:
res=json.dumps({
'urls': list(Urls.objects.all().values_list('address', 'cnt')),
'ips': list(Ip.objects.all().values_list('address', 'cnt'))
}), 'json')
return HttpResponse(res,content_type="application/json")