11

我收到以下错误,

模板'对象不可迭代

def get_AJAX(request, id):
    data = serializers.serialize("json", Template.objects.get(pk=id))
    return HttpResponse(data)

但是,我正在使用'get',所以我不明白为什么会出现此错误。有任何想法吗?

4

3 回答 3

26

那是因为您没有传递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)

希望能帮助到你!

于 2013-05-19T22:21:05.650 回答
1

以 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)
于 2018-06-06T15:39:39.330 回答
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)
于 2020-12-23T10:07:44.210 回答