python - why do I get a single field value in Django formset_factory?
问题描述
when I checked formset_factory validation and get fields to value from formset it returns only one field value from formset. But I can not find any problem in my code. please help me to solve the problem.
My form.py:
class SbTitleForm(forms.Form):
sb_title = forms.CharField(required=False)
sb_permission = forms.BooleanField(required=False)
SbTitleFormSet = formset_factory(SbTitleForm, extra=0)
My view.py:
def menuuser(request):
sbtitle = SbTitle.objects.all().values()
sbtitle_form = SbTitleFormSet(initial=sbtitle)
if request.method == 'POST':
sbtitle_form = SbTitleForm(request.POST, initial=sbtitle)
if sbtitle_form.is_valid():
print(sbtitle_form.cleaned_data)
context = {
'sbtitle_form':sbtitle_form,
}
return render(request, 'admins/user_role/user_permission.html', context)
My HTML:
{% extends 'base/base.html' %}
{% load static %}
{% block content %}
<div class="card">
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
{{ sbtitle_form.management_form }}
{{ sbitleelement_form.management_form }}
<div id="DataTables_Table_2_wrapper" class="dataTables_wrapper no-footer">
<div class="datatable-scroll">
<table class="table table-bordered table-hover datatable-highlight dataTable no-footer" id="DataTables_Table_2" role="grid" aria-describedby="DataTables_Table_2_info">
<thead>
<tr role="row" class="bg-teal-400">
<th class="sorting text-center h5" tabindex="0" aria-controls="DataTables_Table_2" rowspan="1" colspan="1" aria-label="Job Title: activate to sort column ascending">Sidebar Title</th>
</tr>
</thead>
<tbody>
{% for field in sbtitle_form %}
<tr role="row" class="odd">
<td class="sorting_1 text-center"><h4>{{ field.sb_title.value }} {{ field.sb_permission }}<p class="text-danger">{{ field.errors.as_text }}</p></h4></td>
{% endfor %}
</tbody>
</table>
</div>
<div class="card-footer">
<button class="btn btn-lg btn-primary" type="submit">Save</button>
</div>
</div>
</form>
</div>
{% endblock %}
when I try to print(sbtitle_form.cleaned_data) its return only one field value like as {'sb_title': '', 'sb_permission': False}
. I can not get other field value in formset. please help me to solve the problem.
解决方案
sbtitle_form = SbTitleForm(request.POST, initial=sbtitle)
应该是:
sbtitle_form = SbTitleFormSet(request.POST, initial=sbtitle)
def menuuser(request):
sbtitle = SbTitle.objects.all().values()
sbtitle_form = SbTitleFormSet(initial=sbtitle)
if request.method == 'POST':
sbtitle_form = SbTitleFormSet(request.POST, initial=sbtitle) # <----
if sbtitle_form.is_valid():
print(form.cleaned_data)
context = {
'sbtitle_form':sbtitle_form,
}
return render(request, 'admins/user_role/user_permission.html', context)
如果您想访问每个表格:
def menuuser(request):
sbtitle = SbTitle.objects.all().values()
sbtitle_form = SbTitleFormSet(initial=sbtitle)
if request.method == 'POST':
sbtitle_form = SbTitleFormSet(request.POST, initial=sbtitle)
if sbtitle_form.is_valid():
for form in sbtitle_form.forms: # <----
print(form.cleaned_data)
context = {
'sbtitle_form':sbtitle_form,
}
return render(request, 'admins/user_role/user_permission.html', context)
推荐阅读
- python - 如何将使用 OpenPyXL 读取的电子表格转换为 XlsxWriter?
- firebase - 更新 Flutter Firebase_core dart 包后如何在 Flutter 中初始化 Firebase?
- python - 如何读取configparser中某个部分下的所有单词?
- javascript - Discord.Js 断开成员语音通道
- postgresql - RDS 连接处于空闲状态。气流芹菜工人
- javascript - 自定义条纹结帐表格
- python - 如何重塑 DataFrame
- java - Hilt + Espresso:未找到任何活动。您是否忘记通过调用 getActivity() 或 startActivitySync 或类似方法来启动活动?
- python - 从 dask 数据框列中去除空白
- sql - 函数 Oracle PL SQL 批量收集错误 PLS-00382: 表达式类型错误