检索 Django 隐藏的多项选择表单字段值



我有这样的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,一切都很好,我会得到一个正确的主键列表。我发现这种行为非常不一致,如果字段是否隐藏,我正在寻找一种干净的方法来检索此值。

Hidden 只能有一个值,如果你想要多个值,你必须使用 MultipleHiddenInput

裁判

最新更新