Django 更新密码 last_name 为空

Django update password made last_name empty

我正在使用 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 变空了!!

如何预防?

这段代码(在语法上是无效的(我假设你复制粘贴不正确))是罪魁祸首

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

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

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

这会导致保留当前姓氏。