如何在模板上进行只读输入,而不是在模型或视图中?
例如在
中{% for form in formset %}
{{ form.id }}
<tr>
<th>{{ form.project_name }}</th>
如果可能(我在model.py中有默认值),我需要通过html将{{ form.project_name }}
只读(仍为格式)
编辑。我需要它只是浏览器只读,而不是只读表单。
答案 0 :(得分:10)
如果您想让所有字段仅在模板级别读取,请使用HTML <fieldset>
已禁用属性:
<form action="{% url "app.views.fonction" %}" method="post">{% csrf_token %}
<h2>{% trans "Any title" %}</h2>
<fieldset disabled="disabled">
{{ form.as_ul }}
</fieldset>
<input type="submit" class="any" value="any" />
</form>
答案 1 :(得分:2)
如果您想在HTML中制作input
字段readonly
,您必须自己编写所有必需的HTML。
HTML
<input type="text" value="{{ object.field_1 }}" readonly />
<input type="text" value="{{ object.field_2 }}" readonly />
<!-- And so on -->
答案 2 :(得分:1)
最干净的方法是创建一个具有readonlyfields http://google.com
选项的新基本表单类,并为您完成剩下的工作。
你不应该在模板中拥有任何逻辑,而是在视图中验证数据,然后让django渲染只读输入为http://google.com
。
我在制作中使用它非常成功。
meta
这是我在production中使用的代码:
span widget
答案 3 :(得分:0)
有一个非常好的答案here:
您可以通过小部件的属性属性将必要的html添加到表单字段:
myform.fields['thefield'].widget.attrs['readonly'] = True
这样你仍然可以在你的模板中写下
{{myform.thefield.label_tag}}
{{myform.thefield}}
并且Django会将readonly="True"
放入<input ...>
。