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