【问题标题】:Django CheckBoxSelectMultiple not workingDjango CheckBoxSelectMultiple 不起作用
【发布时间】:2014-09-29 17:18:15
【问题描述】:

我的网站帮助音乐家相互联系和借/借他们的乐器。

我的网页上有一个名为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 }}

表单缺少“类别”小部件。它只有日期和位置框。在源代码中,即使我知道类别存在,它也没有显示任何选项。

我一直在试图找出问题所在,但没有结果。有人有什么想法吗?

【问题讨论】:

    标签: django forms templates widget


    【解决方案1】:

    我看不出您发布的代码有任何问题,但我会将逻辑放入表单中:

    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)
    

    这有帮助吗?

    【讨论】:

    • 页面中还有另一种形式有关系吗?我没有提到它,因为它们并没有真正的联系
    猜你喜欢
    • 2018-10-18
    • 2013-03-31
    • 1970-01-01
    • 2012-04-06
    • 2012-03-19
    • 2018-08-02
    • 2019-10-05
    • 2020-11-04
    • 2012-12-03
    相关资源
    最近更新 更多