我有一个CheckboxSelectMutliple小部件MultipleChoiceField:
weight_training_days = forms.MultipleChoiceField(
help_text=u'(Required) 3 days must be selected',
widget=forms.CheckboxSelectMultiple(attrs={
'inline': True,
}),
choices=(
(0, "Mon"),
(1, "Tue"),
(2, "Wed"),
(3, "Thu"),
(4, "Fri"),
(5, "Sat"),
(6, "Sun"),
),
)
我试图动态是设置7个复选框3为“真”。 理想情况下我会从视图中做到这一点。
def change_challenge_settings_page(request):
c = Challenge.objects.get(user__exact = request.user,chal_status=1)
layout = 'horizontal'
form =UpdateChallengeSettingsForm(initial={'goal': c.level_goal })
return render(request, 'portal/portal_change_challenge_settings.html', {'form': form,'layout': layout,'scorecard_page': True,})
我知道如何与ChoiceFields做到这一点(在上面的“目标”的例子是ChoiceField),但我坚持,当谈到MultipleChoiceFields。 我真的很感激任何想法/反馈。
您可以设置初始是一个列表。 如果您设置这种情况下YourForm(inital={'weight_training_days': [0,1,2]})
则默认为周一,周二和周三选择了具有。 你也可以像这样forms.MultipleChoiceField(... inital=[0,1,2] ...)
这是相当简单的,只是通过一个列表。 这里有一个完整的例子:
from django import forms
class UpdateChallengeSettingsForm(forms.Form):
weight_training_days = forms.MultipleChoiceField(
help_text=u'(Required) 3 days must be selected',
widget=forms.CheckboxSelectMultiple(attrs={
'inline': True,
}),
choices=(
(0, "Mon"),
(1, "Tue"),
(2, "Wed"),
(3, "Thu"),
(4, "Fri"),
(5, "Sat"),
(6, "Sun"),
),
)
form = UpdateChallengeSettingsForm(initial={
'weight_training_days': [1,2,4,5,6],
})
print form.as_p()
和输出:
<p><label for="id_weight_training_days_0">Weight training days:</label> <ul>
<li><label for="id_weight_training_days_0"><input inline="True" type="checkbox" name="weight_training_days" value="0" id="id_weight_training_days_0" /> Mon</label></li>
<li><label for="id_weight_training_days_1"><input checked="checked" name="weight_training_days" value="1" inline="True" type="checkbox" id="id_weight_training_days_1" /> Tue</label></li>
<li><label for="id_weight_training_days_2"><input checked="checked" name="weight_training_days" value="2" inline="True" type="checkbox" id="id_weight_training_days_2" /> Wed</label></li>
<li><label for="id_weight_training_days_3"><input inline="True" type="checkbox" name="weight_training_days" value="3" id="id_weight_training_days_3" /> Thu</label></li>
<li><label for="id_weight_training_days_4"><input checked="checked" name="weight_training_days" value="4" inline="True" type="checkbox" id="id_weight_training_days_4" /> Fri</label></li>
<li><label for="id_weight_training_days_5"><input checked="checked" name="weight_training_days" value="5" inline="True" type="checkbox" id="id_weight_training_days_5" /> Sat</label></li>
<li><label for="id_weight_training_days_6"><input checked="checked" name="weight_training_days" value="6" inline="True" type="checkbox" id="id_weight_training_days_6" /> Sun</label></li>
</ul> <span class="helptext">(Required) 3 days must be selected</span></p>
OP说,他们最好要做到这一点的看法,而且我发现,往往是你想要这些动态指定在视图级,而不是形成一级的情况。
这是如何做到这一点,在视图级
form = MySelectForm()
form.fields['my_choice_field'].initial = [1,2,3]
您也可以动态的东西,如指定选择(不只是最初选择的选项):
form.fields['my_choice_field'].choices = [1,2,3,4,5,6,7]