django序列化出错

OngoingDC 2020-06-17 11:16:39
views.py中的post请求一使用DRF序列化就报错,报错信息:
KeyError: "Got KeyError when attempting to get a value for field `department` on serializer `CepingSerializer`.\nThe serializer field might be named incorrectly and not
match any attribute or key on the `dict` instance.\nOriginal exception text was: 'department'."


代码如下:
serializers.py

from rest_framework import serializers


class DepartmentSerializer(serializers.Serializer):
department = serializers.CharField(max_length=64)


class RankSerializer(serializers.Serializer):
rank = serializers.CharField(max_length=12)


class CepingSerializer(serializers.Serializer):
id = serializers.IntegerField()
department = DepartmentSerializer()
name = serializers.CharField(max_length=64)
IDcard = serializers.CharField(max_length=64)
password = serializers.CharField(max_length=256)
identity = serializers.CharField(source='get_identity_display')
rank_id = RankSerializer()
special_identity = serializers.CharField(max_length=64)
cePing = serializers.BooleanField(default=False)
ganBu_finished = serializers.CharField(max_length=256)
ganBu_unfinished = serializers.CharField(max_length=256)
banZi_finished = serializers.CharField(max_length=256)
banZi_unfinished = serializers.CharField(max_length=256)
status = serializers.CharField(max_length=1, default='0')


views.py

class CepingView(APIView):
def get(self, request):
"""获取所有测评者"""
ceping_queryset = Ceping.objects.all()
ser_ceping = CepingSerializer(ceping_queryset, many=True)
return Response(ser_ceping.data)

def post(self, request):
"""根据条件查询测评者信息"""
# 接受传递过来的查询条件,axios默认是json,字典类型('inputstr')--data('inputstr')
data = json.loads(request.body.decode('utf-8'))

# 使用ORM获取满足条件的信息,并把对象转换为字典格式
ceping_queryset = Ceping.objects.filter(
Q(department=data['inputstr']) | Q(status=data['inputstr'])).values()
# 用下面两句有问题
ser_ceping = CepingSerializer(ceping_queryset, many=True)
return Response(ser_ceping.data)
# 这两句没问题
# ceping_queryset = list(ceping_queryset)
# return JsonResponse({'data': ceping_queryset})
...全文
184 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
OngoingDC 2020-06-18
  • 打赏
  • 举报
回复
因为有多个对象,所以应该在序列化器后面加上many=True。忘记这一步了
OngoingDC 2020-06-17
  • 打赏
  • 举报
回复
没有吧,他这个字段是外键,肯定是对外键进行条件查询出错了
放风喽 2020-06-17
  • 打赏
  • 举报
回复
翻译的结果是department这个反序列化字段没找到对应的数据库字段,所以你应该对比一下serializer.py和model.py里面的department是不是拼错字母了
OngoingDC 2020-06-17
  • 打赏
  • 举报
回复
自动结帖哦哦

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧