在我的 Django 应用程序的模板页面之一中,该页面要求用户从复选框列表中选择他想要的选项。
问题是,不同的用户有不同的选择(例如,根据他们过去的兴趣,有不同的选择)。
如何使用 CheckboxSelectMultiple() 字段生成 Django 表单,为每个用户生成自定义选项?
请您参考如下方法:
在 forms.py 中,您需要覆盖 __init__ 方法,并在那里设置调用表单类时从 View 传递的选项。
这是一个例子:
class UserOptionsForm(forms.Form):
user_personal_options = forms.ChoiceField(choices=(),
widget=forms.CheckboxSelectMultiple)
def __init__(self, *args, **kwargs):
choices = kwargs.pop('choices', None) # return the choices or None
super(UserOptionsForm, self).__init__(*args, **kwargs)
if choices is not None:
self.fields['user_personal_options'].choices = choices
所以在你看来:
def user_options(request, user_id):
if request.method == 'POST':
form = UserOptionsForm(request.POST)
if form.is_valid():
# proccess form data here
form.save()
else:
# render the form with user personal choices
user_choices = [] # do shometing here to make the choices dict by user_id
form = UserOptionsForm(choices=user_choices)
