Django更新密码使last_name为空

时间:2016-12-11 07:25:06

标签: python django patch

我使用UserProfileSerializer验证patch请求中的字段:

password = request.data.get('password', '')
if password:
    if len(password) < 6:
        return Response(status=status.HTTP_400_BAD_REQUEST)
    hashed_pass = make_password(password)
    serializer = UserProfileSerializer(instance=user,
                                       data={'last_name': request.data.get('last_name', ''),
                                             'password': hashed_pass,
                                       partial=True)
else:
    serializer = UserProfileSerializer(instance=user, data=request.data, partial=True)
if serializer.is_valid():
     serializer.save()

这是我的序列化器:

class UserProfile(models.Model):
    class meta:
        abstract = True

    password = models.CharField(_('password'), max_length=128, blank=True)
    last_name = models.CharField(max_length=30, validators=[MinLengthValidator(3)], blank=True)


class UserProfileSerializer(ModelSerializer):
    class Meta:
        model = UserProfile

当我更新密码时,last_name空了!!

我如何阻止它?

1 个答案:

答案 0 :(得分:1)

这段代码(在语法上无效(我假设你复制粘贴不正确))是责备

data={'last_name': request.data.get('last_name', ''), 
      'password': hashed_pass,
                                       partial=True)

如果姓氏不在发布数据中,则将姓氏设置为空白。你可能正在寻找类似的东西:

data={'last_name': request.data.get('last_name', user.last_name), 
      'password': hashed_pass}

导致保留当前姓氏。