检索Django隐藏的MultipleChoice表单字段值

时间:2018-10-02 13:03:04

标签: django python-3.x

我有这样的ModelForm

class MyForm(forms.ModelForm):

    many_keys = forms.ModelMultipleChoiceField(OtherModel.objects.all(),
                required=False, widget=forms.HiddenInput)
    # i set this input as hidden
    class Meta:
        model = MyModel
        fields = '__all__'

    def clean(self):
        cleaned_data = super().clean()
        print(self.data.getlist('many_keys'))  # ['[1411, 1412, 1413..']

当我使用此表单更新模型时,many_keys已经填充了先前的值,但是与非隐藏字段不同,getlist以1个字符串的列表形式返回该值,而不是返回一个字符串列表。主键。

实际上,在HTML中,隐藏字段是这样表示的,这可能是问题的根源

 <input type="hidden" name="many_keys" value="[1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420]" id="id_many_keys" />

如果我删除widget=forms.HiddenInput,一切都很好,并且我会得到正确的主键列表。我发现这种行为非常不一致,并且我正在寻找一种干净的方法来检索此值(无论该字段是否隐藏)。

1 个答案:

答案 0 :(得分:1)

隐藏的只能有一个值,如果要多个值,则必须使用MultipleHiddenInput

Ref