【发布时间】:2022-01-01 11:15:03
【问题描述】:
我正在尝试创建一个屏幕来显示我的应用程序中的所有用户,然后能够为用户更新显示的字段。基本上是用户的管理员视图。我希望能够通过点击提交一次更新多个用户。
我使用 modelformsets 来完成这项工作,并从 answer to another question 复制了 html,以便内联显示表单(见下文)。
HTML模板:
<div class="card-body">
<form action="{% url 'bugtracker:users' %}" method='POST'>
<table id="formset" class="form">
{{ formset.non_form_errors.as_ul }}
{{ formset.management_data }}
{% csrf_token %}
{% for form in formset.forms %}
{% if forloop.first %}
<thead><tr>
{% for field in form.visible_fields %}
<th>{{ field.label|capfirst }}</th>
{% endfor %}
</tr></thead>
{% endif %}
<tr class="{% cycle 'row1' 'row2' %}">
{% for field in form.visible_fields %}
<td>
{# Include the hidden fields in the form #}
{% if forloop.first %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% endif %}
{{ field.errors.as_ul }}
{{ field }}
</td>
{% endfor %}
</tr>
{% endfor %}
</table>
<button class="btn btn-primary" type="submit">Submit</button>
</form>
</div>
观点:
@login_required
def users(request):
# users = User.objects.all()
UserFormSet = modelformset_factory(User,fields=('username','first_name','last_name','email','is_contributor','is_projectmanager','is_administrator'), extra=0)
if request.method == 'POST':
formset = UserFormSet(request.POST or None)
print(formset)
if formset.is_valid():
formset.save(commit=True)
messages.success(request,f"save successfull")
return HttpResponseRedirect(reverse("bugtracker:users"))
else:
print("error")
for form in formset:
print(form.cleaned_data)
messages.success(request,f"error")
return HttpResponseRedirect(reverse("bugtracker:users"))
formset = UserFormSet()
context = {
# 'users':users,
'formset':formset,
}
return render(request, 'bugtracker_app/users.html', context)
我发现表单无效,因此没有保存。 form.cleaned_data 如下所示:
<tr><td colspan="2"><ul class="errorlist nonfield"><li>(Hidden field TOTAL_FORMS) This field is required.</li><li>(Hidden field INITIAL_FORMS) This field
is required.</li></ul><input type="hidden" name="form-TOTAL_FORMS" id="id_form-TOTAL_FORMS"><input type="hidden" name="form-INITIAL_FORMS" id="id_form-INITIAL_FORMS"><input type="hidden" name="form-MIN_NUM_FORMS" id="id_form-MIN_NUM_FORMS"><input type="hidden" name="form-MAX_NUM_FORMS" id="id_form-MAX_NUM_FORMS"></td></tr>
这是我第一次使用模型表单集或一般表单集。有人可以告诉我为什么我的表单没有正确保存,以及如何修改我的代码以保持我的表格的形状,但在我点击提交时仍然保存所有记录?
【问题讨论】:
标签: django forms django-views django-forms formset