更新多条记录的 Django 表单

Posted

技术标签:

【中文标题】更新多条记录的 Django 表单【英文标题】:Django form that updates multiple records 【发布时间】:2021-12-31 15:05:35 【问题描述】:

我有 2 类用户,他们可以查看列出我的应用中所有用户的屏幕。用户类型由用户模型上的布尔字段控制。该屏幕当前列出了用户和有关他们的各种详细信息(见下文)。项目经理应该看到页面的只读视图,管理员也应该能够编辑用户。

屏幕的 html

               <div class="card-body">
              <div class="table-responsive">
                <table class="table text-sm mb-0">
                  <thead>
                    <tr>
                      <th>#</th>
                      <th>Username</th>
                      <th>First Name</th>
                      <th>Last Name</th>
                      <th>Is Contributor?</th>
                      <th>Is Project Manager?</th>
                      <th>Is is_administrator?</th>
                    </tr>
                  </thead>
                  <tbody>
                    % for user in users %
                    <tr>
                      <th scope="row"> user.id </th>
                      <td> user.username </td>
                      <td><a class="btn btn-primary" href=" " role="button"> user.first_name </a></td>
                      <td> user.last_name </td>
                      <td> user.is_contributor </td>
                      <td> user.is_projectmanager </td>
                      <td> user.is_administrator </td>
                      <td><a class="btn btn-info" href="" role="button">Edit</a></td>
                      <td><a class="btn btn-danger" href="" role="button">Delete</a></td>
                    </tr>
                    % endfor %
                  </tbody>
                </table>
              </div>
            </div>

我想创建一个可供管理员用户使用的屏幕版本,允许他们一次查看和更新​​所有用户。

如何创建一次更新所有用户的表单?我正在寻找构建的东西,列出与模型关联的字段列表的用户,然后让管理员能够同时为多个用户更改这些字段,然后点击保存按钮提交形式?

【问题讨论】:

【参考方案1】:

我能够使用模型表单集来解决这个问题。 https://docs.djangoproject.com/en/3.2/topics/forms/modelforms/#model-formsets

我刚刚创建了如下所示的表单集。

    UserFormSet = modelformset_factory(User,fields=('username','first_name','last_name','email','is_contributor','is_projectmanager','is_administrator'))
formset = UserFormSet()
context = 
    # 'users':users,
    'formset':formset,

return render(request, 'bugtracker_app/users.html', context)

然后我在模板中循环遍历它:

                </div>
            % for form in formset %
            form
          % endfor %
          </div>

它还没有像我想象的那样安静地格式化(它垂直渲染字段而不是水平渲染,见下文,但我相信我能找到解决这个问题的方法。

【讨论】:

以上是关于更新多条记录的 Django 表单的主要内容,如果未能解决你的问题,请参考以下文章

Django 模型表单不更新数据库记录

在一次提交中更新多条记录? - 导轨 3

如何使用 html 表单更新基于 django 模型的表单(具有选择选项)记录

Django:查询多条记录的最有效方法?

多值组合框在表单中创建多条记录

Django框架,查询多条记录报错