Django中通过API展示Trader类内容报错:'bool'对象不可迭代
问题分析与解决方案
错误根源
ModelViewSet的get_queryset方法要求返回可迭代的查询集(QuerySet),但你的代码里返回的是self.request.user.trader.bot_status——这是一个布尔值(bool类型),布尔值不属于可迭代对象,因此触发TypeError: 'bool' object is not iterable。
修复方案
方案1:改用单对象查询视图类(推荐)
如果你的API仅需返回当前用户的Trader信息,使用RetrieveAPIView更贴合场景(ModelViewSet是为多对象CRUD设计的):
修改views.py:
from rest_framework.generics import RetrieveAPIView class BotStatusView(RetrieveAPIView): serializer_class = BotStatusSerializer def get_object(self): # 返回当前用户对应的Trader对象 return self.request.user.trader
方案2:保留ModelViewSet并修正查询逻辑
若需保留ModelViewSet用于后续扩展,需让get_queryset返回包含当前用户Trader的查询集:
- 修改
views.py的get_queryset方法:
def get_queryset(self): # 返回当前用户对应的Trader对象组成的查询集 return Trader.objects.filter(user=self.request.user)
- 补充序列化器字段配置(原代码未明确指定序列化字段,可能导致返回内容缺失):
修改serializers.py:
class BotStatusSerializer(serializers.ModelSerializer): user = serializers.ReadOnlyField(source='user.username') class Meta: model = Trader fields = ('user', 'bot_status') # 明确指定需要返回的字段 read_only_fields = ('bot_status', )
内容的提问来源于stack exchange,提问作者I'm TreaSUre
相关产品推荐
相关产品推荐

