gpt4 book ai didi

Django 用户帐户更新 - 忽略 "User with this Username already exists"

转载 作者:行者123 更新时间:2023-12-02 17:41:28 24 4
gpt4 key购买 nike

我正在尝试为我的 Django 站点制作一个编辑帐户页面。我正在尝试使用我的注册表格并稍作修改,因为信息基本上都是一样的。我遇到的问题是当用户单击更新时,django 甚至会检查唯一的用户名,如果用户名相同,则返回以下错误。如果他们不更改它,它应该检查字段值是否等于登录的用户名并跳过它。

"User with this Username already exists"

到目前为止,我已经覆盖了 clean 方法,通过 request.user 传递给表单,并检查登录用户名是否与字段用户名相同。查看其他堆栈溢出问题,似乎人们只是 del self._errors['username'] 但我得到了一个关键错误。 self._errors 甚至没有实例化。我也试过将“Unique”属性设置为 false,但它仍然给我错误。我迷路了,所以任何帮助将不胜感激。

我的表单类:

class updateAccount(forms.ModelForm):
username = forms.CharField(required=True, widget=forms.TextInput(attrs={'placeholder': 'Username'}))
email = forms.EmailField(required=True, widget=forms.TextInput(attrs={'placeholder': 'Email Address'}))
first_name = forms.CharField(max_length=100, required=True, widget=forms.TextInput(attrs={'placeholder': 'First Name'}))
last_name = forms.CharField(max_length=100, required=True, widget=forms.TextInput(attrs={'placeholder': 'Last Name'}))

class Meta:
model = User
fields = ('username','email','first_name','last_name')
exclude = ('password',)

def __init__(self, *args, **kwargs):
self.request = kwargs.pop("request")
super(updateAccount, self).__init__(*args, **kwargs)

def clean(self):
if self.request.user.username == self.cleaned_data.get('username'):
self.fields['username'].required = False

super(updateAccount, self).clean()

return self.cleaned_data

def save(self, commit=True):
user = super(updateAccount, self).save(commit=False)
if commit:
user.save()
return user

最佳答案

改用内置的 UserChangeForm

表单.py

from django.contrib.auth.forms import UserChangeForm
from django.contrib.auth.models import User

class MyUserChangeForm(UserChangeForm):
def __init__(self, *args, **kwargs):
super(MyUserChangeForm, self).__init__(*args, **kwargs)
del self.fields['password']

class Meta:
model = User
fields = ('username','email','first_name','last_name')

View .py

def home(request):
if request.method == 'POST':
form = MyUserChangeForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
else:
form = MyUserChangeForm(instance=request.user)

return render(request, 'change_user.html', {"form": form})

关于Django 用户帐户更新 - 忽略 "User with this Username already exists",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20171662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com