【发布时间】:2018-11-09 15:22:24
【问题描述】:
我正在使用 updateapiview 来更新我的用户信息。这是我的看法
class UserUpdateView(generics.UpdateAPIView):
serializer_class = UserUpdateSerializer
def get_queryset(self):
print(self.kwargs['pk'])
return User.objects.filter(pk=self.kwargs['pk'])
def partial_update(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data, partial=True)
if self.get_object() != request.user:
return Response({'error': 'permission denied'}, status=status.HTTP_400_BAD_REQUEST)
print(request.data['password'])
request.data['password'] = make_password(request.data['password'])
instance = super(UserUpdateView, self).partial_update(request, *args, **kwargs)
return instance
这是我的序列化器
class UserUpdateSerializer(serializers.ModelSerializer):
email = serializers.EmailField(required=True)
def validate_username(self, username):
if User.objects.filter(username=username):
raise serializers.ValidationError('Username already exists!!')
return username
def validate_email(self, email):
if User.objects.filter(email=email):
raise serializers.ValidationError('Email already exists!!')
return email
class Meta:
model = User
fields = ('pk', 'username', 'password', 'email')
read_only_fields = ('pk',)
我正在更新数据并成功返回。但是我想在成功更新用户配置文件时添加一些字段,例如带有“成功更新”内容的消息。我搜索了是否有任何方法可以执行此操作,但找不到合适的方法(类似于 django 中的 get_context_data 方法)。那么,有什么办法可以完成上述任务吗??
问题 2: 如何防止自我用户(即如果有一个电子邮件 sample@gmail.com 并且如果用户使用同一电子邮件单击 udpate,它不应该引发用户名已经存在的错误,我想这可以通过 self.instance 完成(但是不知道如何实际实现它)。
谢谢!
【问题讨论】:
标签: django django-rest-framework