【问题标题】:Django form fields not rendering when grouping fields对字段进行分组时,Django 表单字段不呈现
【发布时间】:2022-10-19 20:13:32
【问题描述】:

我正在使用带有引导网络界面的 Django 4.0.3。 出于布局原因,我希望对 ModelForm 中的字段进行分组,并且我正在这样做:

class UserForm(ModelForm):
    template_name = "container/form.html"

    field_groups = [["email", "company"], ["last_name", "first_name"]]
    grouped_fields = []

    class Meta:
        model = MyUser
        fields = ["email", "company", "first_name", "last_name"]

    __init__(self, *args, **kwargs):
        super(UserForm, self).__init__(*args, **kwargs)

    def group_fields(self):
        for group in self._field_groups:
        group_entry = []
        for entry in group:
            group_entry.append(self.fields[entry])

        self.grouped_fields.append(group_entry)

在视图中,我初始化表单并重新组合字段:

def user_form(request):
    form = UserForm()
    form.group_fields()
    render(request, "page.html, {"form", form})

page.html 看起来像这样:

<body>
    <div id="form-wrapper">
        {{ form }}
    </div>
</body>

form.html 看起来像这样:

<form action="" method="POST">{% csrf_token %}
{% for field_group in form.grouped_fields %}
    <div class="row">
    {% for field in field_group %}
        <div class="col">
            <label>{{ field.label }}</label> {{ field }}
        </div>
    {% endfor %}
    </div>
{% endfor %}

但是,呈现的字段显示为字段对象的字符串表示形式:

Email <django.forms.fields.EmailField object at 0x7f98c00e03a0>
Company <django.forms.fields.CharField object at 0x7f98c00e0250>
Last name <django.forms.fields.CharField object at 0x7f98c00e0790>
First name <django.forms.fields.CharField object at 0x7f98c00e10c0>

而普通调用按预期呈现带有输入字段的表单,但不具有所需的布局。

{% for field in form %}
    <div class="row">
        <div class="col">
            {{ field.label_tag }} {{ field }}
        </div>
    </div>
{% endfor %}

我还尝试将 group_fields 方法的调用移至表单在里面但没有成功。 有没有办法呈现正确存储在我的grouped_fields 容器中的字段?

【问题讨论】:

  • 嘿,你有没有想过是什么问题?好奇你是否解决了。谢谢。

标签: python django django-forms


【解决方案1】:

在安静地尝试了一段时间之后,我最终为ModelForm 编写了一个包装器,在那里定义我的field_groups 并将其呈现在模板中。 这不是很好,但它可以解决问题。

<form action="" method="post">
   {% for fieldgroup in form.field_groups %}
        <div class="row fieldgroup">
        {% for fieldname in fieldgroup %}
            {% for field in form %}
                {% if field.name == fieldname %}
                <div class="col pt-2">
                    <label class="form-label">{{ field.label }}</label>
                    {{ field }}
                </div>
                {% endif %}
            {% endfor %}
        {% endfor %}
        </div>
    {% endfor %}
    <button type="submit">Submit</button>
</form>

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 2012-05-09
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    相关资源
    最近更新 更多