访问“serializer.data”后无法调用“.save()”

Cha*_*rma 7 python django python-3.x django-rest-framework

从 API 发布数据时显示错误

You cannot call `.save()` after accessing `serializer.data`.If you need to access data before committing to the database then inspect 'serializer.validated_data' instead. 
Run Code Online (Sandbox Code Playgroud)

我写的代码是:


serializerdata = serializers.CreateSerializer(data=request.data)
if serializerdata.is_valid():
    user_id = serializerdata.data.get('user_id')
    if user_id==2:
        serializerdata.save(i_created_by=request.user)
        return JsonResponse({"message": "success"}) 
    else:
        return JsonResponse({"message": "user invalid"})    
else:
    return JsonResponse({"message": "error"})   

Run Code Online (Sandbox Code Playgroud)

小智 8

请注意,在调试器监视中没有列出serializer.data它会在调用serializer.save()之前读出数据并导致这种令人困惑的行为。我花了至少一个小时才弄清楚。


Nic*_*oen 4

正如错误所示,您无法访问serializer.data然后调用save()

你应该改为用户validated_data

user_id = serializerdata.validated_data.get('user_id')
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是因为“data”是序列化器的原始输入,而“validated_data”是实际的*validated*输入。如果您以某种方式访问​​或修改“data”,则在验证序列化器后,您无法确定“serializer.save()”的结果是什么。 (2认同)