我有这样的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
裁判