我有一个像UserForm
这样的表单类class UserForm(forms.ModelForm):
email=forms.EmailField(widget=forms.EmailInput(attrs={'class':'form-control','required': True}))
password=forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control','required': True}))
class Meta:
model=User
fields=['email','password']
和2查看CreateView和UpdateView。
class UserCreate(CreateView):
template_name='admin/user_crud_form.html'
form_class=UserForm
def get_success_url(self):
return reverse('list_user')
class UserUpdate(UpdateView):
template_name='admin/user_crud_form.html'
form_class=UserForm
exclude = ('password',)
def get_success_url(self):
return reverse('list_user')
现在我只需要排除密码字段进行编辑。我每次只更改电子邮件。但不是密码**。
但是在创建用户时,我将使用两者。怎么样?? 此代码不会在更新视图中排除密码字段。 **我不想使用2个表格来创建和更新**
提前致谢
答案 0 :(得分:1)
您正在使用模型表单。因此,您可以覆盖方法__init__
。
请尝试下面的代码
class UserForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(UserForm,self).__init__(*args, **kwargs)
attrs={'class':'form-control','required': True}
if self.instance and self.instance.pk:
self.fields.pop('password', None)
for field in self.fields.values():
field.widget.attrs = attrs
class Meta:
model=User
fields=['email','password']