我收到以下错误,
模板'对象不可迭代
def get_AJAX(request, id):
data = serializers.serialize("json", Template.objects.get(pk=id))
return HttpResponse(data)
但是,我正在使用'get'
,所以我不明白为什么会出现此错误。有任何想法吗?
我收到以下错误,
模板'对象不可迭代
def get_AJAX(request, id):
data = serializers.serialize("json", Template.objects.get(pk=id))
return HttpResponse(data)
但是,我正在使用'get'
,所以我不明白为什么会出现此错误。有任何想法吗?
那是因为您没有传递iterable 或 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)
希望能帮助到你!
以 Paulo Bu 为例。有时我们想使用 get,因为它提供了其他功能,例如 get_object_or_404(),这个函数在后台使用 get,所以一个小解决方法是将对象包含在一个列表中。
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)
如果您想返回一个不在列表中的对象,只需执行以下操作:
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)