我正在尝试为我的 django 网站创建一个编辑帐户页面。我正在尝试使用稍作修改的注册表单,因为信息基本上都是相同的。我遇到的问题是,当用户单击更新时,django 甚至会检查唯一的用户名,如果用户名相同,则返回以下错误。如果他们不更改它,它应该检查字段值是否等于登录的用户名并跳过它。
“具有该用户名的用户已存在”
到目前为止,我已经重写了 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
Run Code Online (Sandbox Code Playgroud)
请改用内置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')
Run Code Online (Sandbox Code Playgroud)
视图.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})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4442 次 |
| 最近记录: |