Django DRF接口报错utilisateurs_serializer赋值前被引用如何解决?
错误根因
你在GET逻辑中仅当firstname请求参数存在时,才会对utilisateurs_serializer变量赋值,若请求未携带firstname参数,该变量未定义就被调用返回,直接触发变量引用前未赋值的报错。
修复方案
将序列化操作移到firstname判断分支外,不管是否执行筛选逻辑都完成序列化变量的赋值即可,修改后代码如下:
@api_view(['GET', 'POST', 'DELETE']) def utilisateur_list(request): if request.method == 'GET': utilisateurs = Utilisateur.objects.all() firstname = request.GET.get('firstname', None) if firstname is not None: utilisateurs = utilisateurs.filter(firstname__icontains=firstname) # 序列化逻辑移到判断外统一执行 utilisateurs_serializer = UtilisateurSerializer(utilisateurs, many=True) return JsonResponse(utilisateurs_serializer.data, safe=False) elif request.method == 'POST': utilisateur_data = JSONParser().parse(request) utilisateur_serializer = UtilisateurSerializer(data=utilisateur_data) if utilisateur_serializer.is_valid(): utilisateur_serializer.save() return JsonResponse(utilisateur_serializer.data, status=status.HTTP_201_CREATED) return JsonResponse(utilisateur_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
内容的提问来源于stack exchange,提问作者dorra amri
相关产品推荐
相关产品推荐

