Python Django Rest框架:用户更新
我知道这已经被讨论过了,它是基本的,但我找不到它有什么问题。我已经完成了我的旧项目(很有效!),并与我所做的工作保持一致。它从未在序列化程序中更新,我不知道为什么。 我不知道我还缺少什么 错误: {“姓氏”:[“此字段不能为空。”],“传递…”… 空。“]”,“电子邮件”:[“此字段不能为空。”]},状态:400 前端Python Django Rest框架:用户更新,python,django,django-rest-framework,Python,Django,Django Rest Framework,我知道这已经被讨论过了,它是基本的,但我找不到它有什么问题。我已经完成了我的旧项目(很有效!),并与我所做的工作保持一致。它从未在序列化程序中更新,我不知道为什么。 我不知道我还缺少什么 错误: {“姓氏”:[“此字段不能为空。”],“传递…”… 空。“]”,“电子邮件”:[“此字段不能为空。”]},状态:400 前端补丁('api/getprofile') django/DRF序列化程序: class UserSerializer(serializers.ModelSerializer):
补丁('api/getprofile')
django/DRF序列化程序:
class UserSerializer(serializers.ModelSerializer):
first_name = serializers.CharField()
last_name = serializers.CharField()
email = serializers.EmailField()
password = serializers.CharField(style={'input_type': 'password'})
class Meta:
model = User
fields = '__all__'
def create(self, validated_data):
user = User.objects.create(
username=validated_data.get('username'),
email=validated_data.get('email'),
password=validated_data.get('password')
)
user.set_password(validated_data.get('password'))
user.save()
return user
def update(self, instance, validated_data):
#print instance <-- if never gets here... is update not update
for key, value in validated_data.items():
if value:
print value
setattr(instance, key, value)
instance.save()
return instance
您可能需要为
APIView
提供的唯一实现是get\u对象
方法
从源代码中,update
(用于HTTP PUT请求)和partial_update
按您的方式实现
您提供的mixins.UpdateMixins.update
覆盖允许对HTTP PUT
请求进行部分更新,并将模型实例传递给序列化程序进行更新。i、 e
但是,我建议不要以当前方式对mixins.UpdateMixins.update执行覆盖。
使用在mixins.UpdateMixins
中实现的HTTP请求的标准处理,并仅为提供实现。get\u object()
您已经使用UserRetrieveUpdateAPIView.get_object()
完成了此操作。您想实现什么?@OluwafemiSule更新数据。
class UserRetrieveUpdateAPIView(generics.RetrieveUpdateAPIView):
serializer_class = UserSerializer
permission_classes = (IsAuthenticated, )
queryset = User.objects.all()
def get_object(self):
return self.request.user
def update(self, request, *args, **kwargs):
serializer = UserSerializer(data=request.data, partial=True)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
instance = serializer.instance
return Response(UserSerializer(instance=instance).data, status=status.HTTP_200_OK)
serializer = UserSerializer(self.get_object(), data=request.data, partial=True)