Django CheckBoxSelectMultiple无效

时间:2014-08-06 16:58:41

标签: django forms templates widget

我的网站可以帮助音乐人们相互连接和借阅/借出他们的乐器。

我的网页上有一个名为InstrumentSearchForm的表单,您可以按类别,日期和地点搜索工具。

class InstrumentSearchForm(forms.Form): 
    categories = forms.MultipleChoiceField(required=False, widget=forms.CheckboxSelectMultiple())
    date = forms.DateField(required=False)
    location = forms.CharField(required=False)

此表单在view中初始化,并在上下文中传递给模板(我发现了无关紧要的内容)

def main_page(request):  
    if request.method == 'POST':
        ....
    else:
        form_search = InstrumentSearchForm(prefix="search") # An unbound form
    args = {}
    args.update(csrf(request))
    args['form_search'] = form_search
    ...
    categories_to_show = Categories.objects.filter(users = request.user) #show users categories
    form_search.fields['categories'].queryset = categories_to_show
    return render(request, 'main_page.html', args)

问题是,在模板页面中,当我说

{{ form_search }}

表单缺少" 类别"小部件。它只有日期和位置框。在源代码中,即使我知道它们存在,它也不会显示任何类别的选择。

我一直试图弄清楚问题是什么,没有结果。有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

我看不出你发布的代码有什么问题,但我会把逻辑放到表格中:

class InstrumentSearchForm(forms.Form): 
    categories = forms.MultipleChoiceField(queryset=Categories.objects.none(), required=False, widget=forms.CheckboxSelectMultiple())
    ...
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        super(InstrumentSearchForm, self).__init__(*args, **kwargs)
        self.fields['categories'].queryset = Categories.objects.filter(users=user)

并使用:

实例化它
form = InstrumentSearchForm(user=request.user)

这有帮助吗?