Django选择多个小部件:如何设置初始值以设置为“已选择”

时间:2015-03-05 08:32:01

标签: django forms

在我的ModelForm的 init 方法中,我设置了字段类型:

self.fields['gwlist'] = forms.ModelMultipleChoiceField(label='List of gateways:',
    queryset=Gateway.objects.all(),
    initial={'gwlist': initial_list})

我希望在为用户显示表单时设置在整个网关列表中选择的一些网关。但我不能。

有可能吗?

2 个答案:

答案 0 :(得分:1)

您应该将initial作为选定网关列表(不是dict)传递。例如:

initial_list = [Gateway.objects.get(pk=1)]

self.fields['gwlist'] = forms.ModelMultipleChoiceField(
                                            label='List of gateways:',
                                            queryset=Gateway.objects.all(),
                                            initial=initial_list)

更新:如果您在gwlist级别定义Form字段,则应在表单的initial构造函数中设置__init__():< / p>

class DPForm(ModelForm):

    gwlist = forms.ModelMultipleChoiceField(label='List of gateways:',
                                            queryset=Gateway.objects.all())

    def __init__(self, *args, **kwargs):
        super(DPForm, self).__init__(*args, **kwargs)
        init_list = [Gateway.objects.get(pk=11)]
        self.fields['gwlist'].initial=init_list

答案 1 :(得分:0)

表格的工作版本(对我来说):

class DialpeerForm(ModelForm):
    gwlist = forms.ModelMultipleChoiceField(label='Список гейтвеев:',
            queryset=Gateway.objects.all())

    def __init__(self, *args, **kwargs):
        super(DialpeerForm, self).__init__(*args, **kwargs)
        init_list = [Gateway.objects.all()]
        self.initial['gwlist'] = init_list

我之前读过,更新字段的初始值不起作用。因此,我们需要更新孔形式的初始化。和这个字符串中的魔术子弹: self.initial ['gwlist'] = init_list

现在我需要“选择”参数。

Django 1.7.5