【发布时间】: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