You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DRF中'TranslateCategory'对象不可迭代错误求助

解决DRF中'TranslateCategory' object is not iterable错误

常见原因及修复步骤

1. 匹配视图类与接口类型

访问带主键的详情接口(如/api/translate/categories/1/)时,需使用RetrieveAPIView而非列表类视图(ListAPIView):

# views.py 错误示例
from rest_framework.generics import ListAPIView
from .models import TranslateCategory
from .serializers import TranslateCategorySerializer

class TranslateCategoryDetail(ListAPIView):
    queryset = TranslateCategory.objects.all()
    serializer_class = TranslateCategorySerializer

修复后:

# views.py 正确示例
from rest_framework.generics import RetrieveAPIView
from .models import TranslateCategory
from .serializers import TranslateCategorySerializer

class TranslateCategoryDetail(RetrieveAPIView):
    queryset = TranslateCategory.objects.all()
    serializer_class = TranslateCategorySerializer

2. 修正序列化器many参数

手动实例化序列化器时,单个对象无需添加many=True(该参数仅用于列表数据):

# views.py 错误示例
def category_detail(request, pk):
    category = TranslateCategory.objects.get(pk=pk)
    serializer = TranslateCategorySerializer(category, many=True)
    return Response(serializer.data)

修复后:

# views.py 正确示例
def category_detail(request, pk):
    category = TranslateCategory.objects.get(pk=pk)
    serializer = TranslateCategorySerializer(category)
    return Response(serializer.data)

3. 检查自定义视图方法返回值

若自定义get_object或get_queryset,需保证详情接口返回单个对象,列表接口返回QuerySet:

# views.py 错误示例
class TranslateCategoryDetail(RetrieveAPIView):
    serializer_class = TranslateCategorySerializer
    def get_queryset(self):
        return TranslateCategory.objects.get(pk=self.kwargs['pk'])  # 返回单个对象而非QuerySet

修复后:

# views.py 正确示例
class TranslateCategoryDetail(RetrieveAPIView):
    serializer_class = TranslateCategorySerializer
    def get_object(self):
        return TranslateCategory.objects.get(pk=self.kwargs['pk'])  # 用get_object返回单个对象

4. 核对URL路由绑定

确保详情路由绑定到详情视图类,而非列表视图:

# urls.py 错误示例
path('api/translate/categories/<int:pk>/', TranslateCategoryList.as_view(), name='category-detail')

修复后:

# urls.py 正确示例
path('api/translate/categories/<int:pk>/', TranslateCategoryDetail.as_view(), name='category-detail')

内容的提问来源于stack exchange,提问作者Dias Oralbekov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:05:58