【问题标题】:Django forms how to dynamically render fields in a loopDjango表单如何在循环中动态呈现字段
【发布时间】:2019-07-21 12:56:07
【问题描述】:

假设我有一个包含一些字段的表单。其中一些字段是测量单位:

['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>

感谢您将此文本转换为实际字段的任何帮助

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    我解决这个问题的方法是编写一个simple tag,它返回一个边界对象&lt;django.forms.boundfield.BoundField object at 0x0000025而不是&lt;django.forms.fields.ChoiceField object at 0x000001E5F35F3C18&gt;

    @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
    

    【讨论】:

      猜你喜欢
      • 2020-06-23
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      相关资源
      最近更新 更多