假设我有一个包含某些字段的表格。其中一些字段是度量单位:
['quantity_units', 'weight_units', 'dimension_units']
我也有以下字段:
['quantity', 'weight', 'dimension']
我想在该字段旁边显示度量单位:
Quantity: ___________________ _______<unit of measurement drop-down list>______
我认为我应该先遍历表单的各个字段。对于通过表单字段进行的每次迭代,我将检查字段名称是否在units_list中,如果存在,则将渲染字段及其单位字段,如下所示:
{% for field in form %}
{% for field_name in units_fields %}
{% if field.name in field_name %}
{{ field|add_class:"site-form-control" }} {{ form.field_name}}
{% else %}
{% ifchanged %}
{{ field|add_class:"site-form-control" }}
{% endifchanged %}
{% endif %}
{% endfor %}
{% endfor %}
这不会使用下拉列表小部件呈现度量单位字段。
有什么办法解决这个问题吗?
编辑:
我注意到,由于某种原因,Django两次显示了{{ field }}
,而没有显示{{ form.field_name }}
。为了手动选择字段,我编写了一个模板过滤器来获取给定字典键值的值。然后,我在{{form.fields}}上使用了它,它是orderedDict
{% for field_name in units_fields %}
{% if field.name in field_name %}
{{ form.fields|dict_key:field_name }}
{% else %}
{% ifchanged %}
{{ field|add_class:"site-form-control" }}
{% endifchanged %}
{% endif %}
{% endfor %}
这将呈现我想要的字段的文本表示形式:
<django.forms.fields.ChoiceField object at 0x000001E5F35F3C18>
感谢您提供任何帮助将文本转换为实际字段的帮助
答案 0 :(得分:0)
我解决此问题的方法是编写一个simple tag来返回边界域对象<django.forms.boundfield.BoundField object at 0x0000025
而不是<django.forms.fields.ChoiceField object at 0x000001E5F35F3C18>
@register.simple_tag(takes_context=True)
def get_form_field(context, form, field_name):
''' Given a form and a field_name, it returns form.field'''
try:
field = form[field_name]
except KeyError:
field = None
return field