【发布时间】:2025-12-19 22:15:11
【问题描述】:
我认为,隐藏字段的值在 POST 期间被 Django 完全忽略。
- 该字段没有cleaned_data
- 没有办法改变它 最重要的是:
- 如果需要会导致错误“输入值列表”。即使您可以在代码中看到该值:
<input id="id_names" name="names" type="hidden" value="[35]" />
这可能是一个很好的解决方案(如果隐藏字段被忽略,任何人都无法破解),但应该记录在案,并且不应该被要求。
【问题讨论】:
-
隐藏字段为用户隐藏界面。在所有其他方面,它们的行为与普通字段完全相同 - 这包括它们可能是必需的。另请注意,您可以使用任何包含一些开发人员工具的现代浏览器来编辑隐藏字段的值。话虽如此,我不确定你的问题是什么。
-
您的问题是
ModelMultipleChoiceField不适用于HiddenInput。该字段需要一个值列表,例如[35],但小部件返回一个字符串,例如'[35]'。HiddenInput被隐藏这一事实并不重要,TextInput也会出现同样的问题。您可以尝试编写一个与ModelMultipleChoiceField一起使用的隐藏小部件(我在搜索时找不到现有的小部件)。大多数时候,您根本不需要隐藏字段,您可以在视图中处理该字段。但是,您在三个问题中显示的代码太少了,我无法分辨。 -
@knbk 你写的都是重言式。我的问题是一个假设,隐藏字段被 POST 忽略,因为它的行为不像普通 HTML 那样 - 我的意思是如果 POST 请求将由 PHP 处理,它将正常工作。但我认为 DJANGO 忽略了 POST 中的隐藏价值。
-
@Alasdair 在这个问题中与 ModelMultipleChoiceField 无关。我发现,必需的隐藏字段会产生错误“输入值列表”如果我删除必需的一切正常。所以我试图确认或否认这种行为。
-
如果你的模型上有一个多对多的字段,Django 会自动使用
ModelMultipleChoiceField作为模型表单。因此,将HiddenInput与ManyToManyField模型字段一起使用将不起作用,就像它与ModelMultipleChoiceField表单字段一样不起作用。这不是因为HiddenInput被隐藏了。TextInput会出现同样的错误。
标签: django hidden-field