为隐藏的ModelForm字段Django设置defalut值

时间:2017-06-11 15:36:33

标签: python django

我想在HiddenInput MetaModelForm对象中传递class Meta: model = SomeModel fields = ['some_id', 'some_amount',] 表单字段的初始值。如果该字段未被隐藏,例如as:

kwargs

并将初始值通过kwargs传递给此表单构造函数,然后将初始值正确设置为这些字段。

但是当我尝试隐藏一个字段时(但我仍然需要将其设置为class Meta: model = SomeModel widgets = {'ord_id': forms.HiddenInput(),} fields = ['some_id', 'some_amount',] 的初始值),例如为:

'ord_id'

然后kwargs未设置为import System.Environment main :: IO () main = do cla <- getArgs let flags = parseFlags (filter isFlag cla) [] let args = filter (not.isFlag) cla input <- if (elem "e" flags) then (head args) else (readFile (head args)) 的初始值,并且在尝试提交此类表单时出现以下错误:

  

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

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

2 个答案:

答案 0 :(得分:1)

如果您已经使用检查工具验证了您的选择元素确实选择了正确的选项,则问题可能是您的字段被禁用而不是隐藏。我在尝试提交禁用字段时看到了类似的错误消息。如果情况并非如此,我可能会有一个替代解决方案,将您的字段指定为隐藏。

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

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

答案 1 :(得分:0)

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

第一种方法是在初始化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)
    ...

其次是重写__init__形式,即

class ExampleForm(forms.ModelForm):

def __init__(self, *args, **kwargs):
    """If no initial data, provide some defaults."""
    initial = kwargs.get('initial', {})
    initial['ord_id'] = 'ord_id'
    kwargs['initial'] = initial
    super(ExampleForm, self).__init__(*args, **kwargs)