我收到以下错误,
模板'对象不可迭代
def get_AJAX(request, id):
data = serializers.serialize("json", Template.objects.get(pk=id))
return HttpResponse(data)
但是,我正在使用'get'
所以我不明白为什么我会收到此错误。有什么想法吗?
答案 0 :(得分:17)
那是因为你没有传递iterable nor a QuerySet,而是传递了一个Template
对象。如果要序列化该单个对象,可以这样做:
def get_AJAX(request, id):
data = serializers.serialize("json", [Template.objects.get(pk=id)])
return HttpResponse(data)
更新:建议改为使用filter
。
如果pk不存在,还可以考虑使用filter
而不是get来避免可能的异常。这样您就不需要括号,因为它是QuerySet
对象
def get_AJAX(request, id):
data = serializers.serialize("json", Template.objects.filter(pk=id))
return HttpResponse(data)
希望它有所帮助!
答案 1 :(得分:0)
关注Paulo Bu示例。有时候我们想使用get,因为它提供了其他功能,比如get_object_or_404(),这个函数使用了引擎,所以一个小的解决方法是将对象包含在列表中。
def get_AJAX(request, id):
_data = [Template.objects.get(pk=id)] # This is now list.
data = serializers.serialize("json", _data)
return HttpResponse(data)
或
def get_AJAX(request, id):
_data = [get_object_or_404(Template, pk=id)] # This is now list.
data = serializers.serialize("json", _data)
return HttpResponse(data)
答案 2 :(得分:0)
如果你想返回一个不在列表中的对象,只需简单地这样做:
serializer = CustomSerializerClass(queryset) # This queryset is the one with a get()
return Response(status=status.HTTP_201_CREATED, data=serializer.data)
注意:
您不需要在序列化程序中添加 many=True
:
serializer = CustomSerializerClass(queryset)