django - Django表单如何在循环中动态呈现字段
问题描述
假设我有一个包含一些字段的表单。其中一些字段是测量单位:
['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>
将此文本转换为实际字段的任何帮助表示赞赏
解决方案
我解决这个问题的方法是编写一个简单的标签,它返回一个 boundfield 对象<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
推荐阅读
- javascript - 为什么这个未赋值的 let 变量不会导致引用错误?
- php - 我应该在我的图像表中存储评论/喜欢/不喜欢的数量吗?
- css - 带有内嵌文本的加载器的 Vuetify 按钮
- python - 将数据从表单中的条件/链式下拉框传递到视图或直接传递到 URL
- javascript - 在 2 个 react-router-v4 项目之间导航
- git - Git警告:无法访问'/home/user/.gitconfig':是一个目录
- javascript - 无法使用引导程序修复侧 div
- c# - C# 服务在安装时创建注册表
- python - pygame - 获取文本的当前颜色(pygame.Surface 类型)
- rust - How to I explicitly assign a type to an `Option
` that is used in a `match`?