我正在使用Django 1.9.5 我在视图中使用表格。 在我的视图中,我将在forms.py中将相同的表单用于GET和POST。 我想排除一个字段,如果它是GET。 我希望它显示所有字段,如果它是POST。 我不希望在form.py中使用2种不同的形式来显示相同的视图。
Views.py
method = 'GET'
mine_form = MineForm(prefix='mine', method=method)
Forms.py
class MineForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput, required=False)
re_password = forms.CharField(
widget=forms.PasswordInput, label='Re-type Password', required=False)
class Meta:
model = Mine
exclude = []
widgets = {
'gender': forms.RadioSelect(renderer=HorizontalRadioRenderer),
'uuid': forms.HiddenInput(),
}
exclude = ['user', ]
def __init__(self, *args, **kwargs):
self.method = kwargs.pop('method', None)
super(MineForm).__init__(*args, **kwargs)
if self.method == 'GET':
self.fields.pop('delete_mine')
答案 0 :(得分:0)
以
__init__()
方法
class NameForm(forms.Form):
your_name = forms.CharField(label='Your name', max_length=100)
age = forms.IntegerField()
def __init__(self, *args, **kwargs):
self.method = kwargs.pop('method', None)
super(NameForm, self).__init__(*args, **kwargs)
if self.method == 'GET':
self.fields.pop('age')
,并且在您的视图中将method
参数传递为,
def get_name(request):
if request.method == 'POST':
form = NameForm(request.POST, method='POST')
if form.is_valid():
return HttpResponseRedirect('/thanks/')
else:
form = NameForm(method='GET')
return render(request, 'name.html', {'form': form})
答案 1 :(得分:0)
如果是GET请求,您可以直接从fields
字典中删除该字段:
if request.method == 'GET':
del self.fields["yourField"]