Django 如何排除单个 modelForm 中的字段,仅用于 updateview 而不是 createview?
Django How to exclude field in a single modelForm for only updateview but not createview?
我有一个表单 class 就像 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 个表单来创建和更新 **
提前致谢
您正在使用模型表单。因此,您可以覆盖方法 __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']
我有一个表单 class 就像 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 个表单来创建和更新 **
提前致谢
您正在使用模型表单。因此,您可以覆盖方法 __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']