如何在InputHidden IntegerField中将值传递给Django-Modelform,甚至不会干扰模板中的可见字段

时间:2012-02-28 09:45:35

标签: django django-models django-forms django-templates

我创建了一个包含三个字段的Django模型,其中一个字段被隐藏,其余部分可见

1.CharField
2.IntegerField (Hidden Field)
3.DateTimeField

我使用以下代码隐藏了这个:

class HostCreateForm(forms.ModelForm):
    class Meta:
        model = Host
        widgets = {
            'Zone_Vale': forms.HiddenInput()
          }

要查看此表单,我在我的temlate中使用以下代码:

<form action="" method="POST">
    {{ form.as_p }}
    <input type="submit" value="{% trans "Add host" %}" />

一切都很好,但我也希望在此输入隐藏层中传递一个变量。我不知道这样做。我尝试通过自定义模板来做(请参阅此链接:) https://docs.djangoproject.com/en/dev/topics/forms/` 例如,{{form.as_p}}将返回一个包含两个可见字段的表单,其中的数据是:(用户输入了什么)和隐藏字段。所以,我想将一个变量传递给template.html文件中的隐藏字段

它也不起作用。需要你的帮助

2 个答案:

答案 0 :(得分:1)

考虑到渲染模板的方式,您将无法在模板级别将变量传递给字段。

如果你真的,绝对必须在模板级别将变量传递给表单,我建议创建一个模板标签:

  1. 从请求上下文中解析变量
  2. 使用变量作为表单
  3. 的初始数据的一部分来实例化表单类
  4. 将表单添加到要呈现的上下文

答案 1 :(得分:1)

如果您觉得自己很脏,快速解决方案是使用javascript填充此字段。在view.py

实例化表单对象时,正确的方法应该是使用“initial”参数

参考:https://docs.djangoproject.com/en/1.3/ref/forms/api/#django.forms.Form.initial

即使是非常脏,像这样的一些javascript解决方案也会起作用: (使用jQuery。适应您的需求)

<script type="text/javascript">
    $(document).ready(function(){
        $('form input[name$="Zone_Vale"]').val(DESIRED_HIDDEN_VALUE)
    })
</script>

但不要因为这样做而自豪。