Python 为隐藏的ModelForm字段Django设置默认值

Python 为隐藏的ModelForm字段Django设置默认值,python,django,Python,Django,我想为ModelForm对象的Meta类中的HiddenInput表单字段传递一个初始值。如果该字段未隐藏,例如: class Meta: model = SomeModel fields = ['some_id', 'some_amount',] 我通过kwargs将初始值传递给表单构造函数,然后将初始值正确设置为这些字段 但当我试图隐藏一个字段时(但我仍然需要将其设置为kwargs中的初始值),例如: class Meta: model = SomeModel

我想为
ModelForm
对象的
Meta
类中的
HiddenInput
表单字段传递一个初始值。如果该字段未隐藏,例如:

class Meta:
    model = SomeModel
    fields = ['some_id', 'some_amount',]
我通过
kwargs
将初始值传递给表单构造函数,然后将初始值正确设置为这些字段

但当我试图隐藏一个字段时(但我仍然需要将其设置为
kwargs
中的初始值),例如:

class Meta:
    model = SomeModel
    widgets = {'ord_id': forms.HiddenInput(),}
    fields = ['some_id', 'some_amount',]
然后,
'ord_id'
未设置为来自
kwargs
的初始值,我在尝试提交此类表单时出现以下错误:

(隐藏字段ord_id)选择一个有效选项。该选择不是可用的选择之一


那么,有没有办法将初始值正确地传递给隐藏的表单字段?

您可以通过两种方式将默认值设置为
表单
字段

第一种方法是在
view.py
中初始化表单时传递默认值,即

from forms import ExampleForm

INITIAL_DATA = {'ord_id': 'some_id'}

def my_view(request):
    ...

    if request.method == 'GET':
        form = ExampleForm(initial=INITIAL_DATA)
    if request.method == 'POST':
        form = ExampleForm(request.POST)
    ...
第二种方法是重写表单
\uuuu init\uuu
方法,即

类示例表单(forms.ModelForm):


如果已使用检查工具验证选择元素确实选择了正确的选项,则问题可能是字段以某种方式被禁用,而不是仅仅隐藏。我在尝试提交禁用字段时看到了类似的错误消息。如果不是这样的话,我可能有一个替代方案来指定你的字段为隐藏

如果您使用的是django模板,您可以使用它来修改模板中的表单字段,这允许您执行诸如添加类和样式或更改值之类的操作。因此,您可以像以前一样将初始参数传递给表单,并使用模板标记隐藏它们。希望这对你有用

{% for field in form %}
    {% if field == form.hidden_field_name %}
        {% render_field field hidden='True' id='hidden-field' class='hidden-field-class' %}
    {% endif %}
{% endfor %}

我已经在kwargs的初始参数中添加了必需的参数。但这不是问题所在,问题在于即使“ord\u id”在“初始”字典中,当此字段小部件设置为
forms.HiddenInput()
时,它也不会初始化“ord\u id”字段。因此,如果我不使用此小部件,一切正常,“ord_id”字段将使用来自“initial”kwargs dict的值初始化。请提供我们的models.py错误指示您试图提供无效ord_id的值
{% for field in form %}
    {% if field == form.hidden_field_name %}
        {% render_field field hidden='True' id='hidden-field' class='hidden-field-class' %}
    {% endif %}
{% endfor %}