我有以下表格:
class TutorForm(SignupForm):
subjects = forms.ModelMultipleChoiceField(queryset=Subject.objects.all(),
widget=forms.CheckboxSelectMultiple())
我有一个名为TutorUpdateForm
的子表单,它继承自TutorForm
,并在init方法中设置初始值。
self.fields['subjects'].initial = current_user.subjects.all()
在我的模板中,不会检查值(在视图中值存在,因此设置初始值有效)。如何在模板中强制执行检查输入?
编辑(初始代码)
def __init__(self, *args, **kwargs):
current_user = None
try:
current_user = kwargs.pop('user')
except Exception:
pass
super(TutorUpdateForm, self).__init__(*args, **kwargs)
for field in _update_exclude:
self.fields.pop(field)
if current_user:
self.fields['subjects'].initial = current_user.subjects.all()
答案 0 :(得分:5)
您应该将初始值传递给super
的调用,您还可以为dict.pop
设置默认值,而不是使用try / except
def __init__(self, *args, **kwargs):
current_user = kwargs.pop('user', None)
initial = kwargs.get('initial', {})
if current_user:
initial.update({'subjects': current_user.subjects.all()})
kwargs['initial'] = initial
super(TutorUpdateForm, self).__init__(*args, **kwargs)
for field in _update_exclude:
self.fields.pop(field)
上文档的链接