【发布时间】:2014-03-07 21:34:38
【问题描述】:
我有一个简单的表单类,定义了以下单个字段:
class LaunchForm(forms.Form):
file_name = forms.FileField(required=True, label='File to import')
在我的模板中:
<form action="" method="post">
{{ form.file_name }}
<table>
{{ form.as_table }}
</table>
{% csrf_token %}
<input type="submit" value="Submit">
</form>
正在从视图中调用表单,如下所示:
class Application_Launch_View(View):
form_class = LaunchForm
template_name = 'application_launch.html'
def get(self, request, app_id):
form = self.form_class(application_id=app_id)
return render(request, self.template_name, {'form': form})
我将变量 {{ form.file_name }} 放入模板中只是为了验证表单字段是否存在。我的浏览器页面上显示的内容(以及模板中的所有其他内容)是:
<django.forms.fields.FileField object at 0x032A08F0>
但是 form.as_table 似乎没有产生任何结果。
我尝试在我的视图中实例化表单后立即发出以下函数调用,就在调用 render() 函数之前:
打印(form.file_name) 打印(form.as_table())
服务器日志显示:
<django.forms.fields.FileField object at 0x032A08F0>
后跟一个空格。如果我删除对 as_table() 的调用,则不会出现空格。我尝试在视图中替换 form.as_p() ,但得到相同的结果,因此看来这两种方法都至少输出 CR 或 CR/FL 对。
除了 as_table() 和 as_p() 方法之外,似乎一切正常,我不知道为什么......
++++++++++++++++++++++
在深入研究这一点时,我注意到另一个表单,当从模板中引用表单上的 Django 字段对象时,不会产生我上面发布的对象类描述,而是预期的表单字段。
所以我要问一下,下面两种建立表单域的方法有什么区别,有没有办法让第二种方法(__init__()内)起作用?
方法1(可行):
class LaunchForm:
file_name = forms.FileField(required=True,
label='File to import',
initial='Default value')
方法2(这行不通):
class LaunchForm:
def __init__(self, *args, **kwargs)
self.file_name = forms.FileField(required=True,
label='File to import',
initial='Default value')
【问题讨论】:
标签: python django django-forms python-3.3