Django用户名编辑问题

Django用户名编辑问题,django,django-authentication,Django,Django Authentication,我想允许用户更改他们的用户名,因此我有一个表单: class UserForm(models.ModelForm): class Meta: model = User fields = ('username', 'first_name', 'last_name') 在模板中,我有一个问候语块,类似于Hello,{{request.user.username} 当我提交一个用户名已经存在的表单时,它会抛出一个错误,该用户名已经存在。但是在问候语块中,我看

我想允许用户更改他们的用户名,因此我有一个表单:

class UserForm(models.ModelForm):

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name')
在模板中,我有一个问候语块,类似于Hello,{{request.user.username}

当我提交一个用户名已经存在的表单时,它会抛出一个错误,该用户名已经存在。但是在问候语块中,我看到Hello,username,其中username是我提交的用户名

我做错了什么?有人面临类似的情况吗

以下是查看代码:

@login_required
def persona_edit(request):

    form = PersonaForm(request.POST or None, instance=request.user.persona)
    user = User.objects.get(pk=request.user.pk)
    user_form = UserForm(request.POST or None, instance=user)

    if form.is_valid() and user_form.is_valid():
        form.save()
        user_form.save()
        messages.success(request, _(u'Profile updated'))
        return redirect('identity:dashboard')

    payload = {'form': form, 'user_form': user_form}
    return render(request, 'identity/persona_edit.html', payload)

您是否将用户实例传递给表单?Django在contrib.auth.forms>userchangeform中有一个用于更改用户信息的内置表单感谢各位的响应。我找到了一个理由。将request.user作为实例参数发送到表单时出现问题。当我把User.objects.getpk=request.User.pk放在那里时,它工作得很好。似乎我在文档中遗漏了什么。这很奇怪。如果您:>>>打印typerequest.user,则应为user。我不确定为什么request.user与用户实例不一样……这些奇怪的事情可能是,如果将request.user作为实例传递给表单,表单将使用对request.user的引用,因此,当表单操纵其实例请求时,用户也将被操纵……您是否将用户实例传递给表单?Django在contrib.auth.forms>userchangeform中有一个用于更改用户信息的内置表单感谢各位的响应。我找到了一个理由。将request.user作为实例参数发送到表单时出现问题。当我把User.objects.getpk=request.User.pk放在那里时,它工作得很好。似乎我在文档中遗漏了什么。这很奇怪。如果您:>>>打印typerequest.user,则应为user。我不确定为什么request.user会与用户实例不同…这些奇怪的事情可能是因为,如果将request.user作为实例传递给表单,表单将使用request.user的引用,因此当表单操纵其实例request.user时,也会操纵它。。。