我有一个表单,我想在网站上重复使用,但有时候我想省略表单中的特定字段。在视图中初始化表单时是否可以执行此操作?
答案 0 :(得分:1)
您可能无法删除字段,但您可以使用表单的__init__
方法覆盖表单的窗口小部件。
from django import forms
class MyForm(forms.Form):
some_field=forms.CharField()
other_field=forms.CharField()
def __init__(self, my_criteria, *args,**kwrds):
super(MyForm,self).__init__(*args,**kwrds)
if my_criteria == 'this':
self.fields['some_field'].widget = forms.HiddenInput(required=False)
elif my_criteria == 'that':
self.fields['other_field'].widget=forms.HiddenInput(required=False)
#else: pass - leave it the way it is.
如果要渲染不同类型的表单,可以在声明表单时传入具有特定值的参数,并使用该参数在运行时呈现HiddenInput
窗口小部件,将其隐藏在表单中
答案 1 :(得分:0)
我认为只有ModelForm才有办法,但你能做的就是这个
fromd django.forms import forms
class MyForm(forms.Form):
text = forms.CharField()
another_text = forms.CharField()
并在您看来像:
from myforms import MyForm
from django.shortcuts import render
def view(request):
form = MyForm(request.POST)
model = MyModel()
model.text = form.clean['text']
model.another_text = "Some value"
model.save()
return render(request, 'template.html', {'form':form})
并在您的template.html中:
<form action="">
{{form.text}}
</form>
这只会在template.html中显示一个文本字段