我有一个表格,当我不想要它们时,根据需要出现几个字段.这是models.py的表单
class CircuitForm(ModelForm):
class Meta:
model = Circuit
exclude = ('lastPaged',)
def __init__(self, *args, **kwargs):
super(CircuitForm, self).__init__(*args, **kwargs)
self.fields['begin'].widget = widgets.AdminSplitDateTime()
self.fields['end'].widget = widgets.AdminSplitDateTime()
Run Code Online (Sandbox Code Playgroud)
在实际的Circuit模型中,字段定义如下:
begin = models.DateTimeField('Start Time', null=True, blank=True)
end = models.DateTimeField('Stop Time', null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
我的views.py就在这里:
def addCircuitForm(request):
if request.method == 'POST':
form = CircuitForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/sla/all')
form = CircuitForm()
return render_to_response('sla/add.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)
我该怎么办才能不需要这两个字段?
我正在尝试根据另一个字段的输入将表单字段的 required 更改为“False”。
形式:
class MyNewForm(forms.Form):
def __init__(self, *args, **kwargs):
self.users = kwargs.pop('users', None)
super(MyNewForm, self).__init__(*args, **kwargs)
self.fields['name'] = forms.CharField(
max_length=60,
required=True,
label="Name *:",
widget=forms.TextInput(
attrs={'class' : 'form-control', 'placeholder': 'Name'})
)
def clean_this_other_field(self):
# change required field
name = self.fields['name']
print name.required
name.required=False
print name.required
Run Code Online (Sandbox Code Playgroud)
打印结果:
真的
错误的
因此,所需的字段更改为“假”,但当表单页面重新加载时,它会恢复为“真”
有什么建议?
编辑 - 问题解决
对于任何遇到类似问题的人:
def clean_remove(self):
cleaned_data = super(MyNewForm, self).clean()
remove = cleaned_data.get('remove', None)
if remove:
self.fields['name'].required=False
Run Code Online (Sandbox Code Playgroud)
Remove 是表单中的第一个字段,因此在 remove 字段上添加这个 clean 可以解决问题。