在我的Django 1.7应用程序中,我正在尝试利用MultiValueField类来实现密码/确认密码表单元素,即两个单独的密码字段,要求用户输入然后确认新密码。我已经在我的表单上使用了两个单独的字段和clean()
方法,但“单个”MultiValueField似乎是一种更好的维护DRY原则的方法,特别是因为我不仅需要在我的用户注册表,以及用户想要更改密码时。
但是,我的前端非常具体,并且不像Django的默认表单输出,所以我manually rendering my form fields。这很有效 - 直到我进入MultiValueField。对于每个表单字段,我的HTML如下所示:
<div class="row collapse">
<div class="small-2 columns">
<span class="prefix"><i class="fi-mail"></i></span>
</div>
<div class="small-10 columns {% if form.email.errors %}error{% endif %}">
{{ form.email }}
{% if form.email.errors %}<small class="error">{{ form.email.errors }}</small>{% endif %}
</div>
</div>
我需要对form.password
的每个子字段进行类似的格式化,但我尝试过的任何内容都没有给我一个渲染的子字段;我最接近的是{{ form.fields.password.fields.0 }}
在我的模板中,它为我提供了类似<app.fields.PassField object at 0x7fb619821ef0>
的输出,但这显然不是渲染的表单字段。
是否有一些简单而明显的东西让我失踪,或者我正在尝试做什么,而这在Django中是不可能的?
答案 0 :(得分:0)
Render only one part of a MultiWidget in Django中的代码适合您的问题,正如farthVader建议的那样。
答案 1 :(得分:0)
我遇到了类似的问题,最终以这种方式解决了这个问题:
<input type="text" id="{{ form.password.html_name }}_0" name="{{ form.password.html_name }}_0" value="{{ form.password.value.0|default_if_none:'' }}"/>
<input type="text" id="{{ form.password.html_name }}_1" name="{{ form.password.html_name }}_1" value="{{ form.password.value.1|default_if_none:'' }}"/>