Django形成表td与readonly字段

时间:2017-11-06 14:14:22

标签: django forms

我希望在表格中显示模型的所有对象,其中信息为表中的只读字段,每个字段作为表格的单元格。

目前,我可以使用所有记录在表格周围呈现表单...

In views: schedule_projects = Record.objects.all()

In template:

<form action="" method="POST">{% csrf_token %}
<table>
    <thead>
       <tr>
          <th>Record</th>
          <th>Date</th>
          <th>Comment</th>
          <th colspan="2">Attached</th>
          </tr>
          </thead>
          {% for record in schedule_projects %}
            <tr>
               <td>{{record.projectname}}</td>
               <td>{{record.date_edited|date:"d-m-Y H:i"}}</td>
               <td>{% if record.project_details %}{{record.project_details}}{% else %}{%endif%}</td>
                <td>{{record.attached_files|default_if_none:'0'}}</td>
                <td><input type="checkbox" name="record" value="{{record.plan_delete}}"></td>    
            </tr>
            {% endfor %}
            </table>
            <button type="submit" name="plan_delete">Add to delete schedule</button></form>

不是像这样手动操作,而是想用form.py中内置的表单来完成它,因为它提供了验证,csrf和其他方法。

我希望表单呈现没有标签的每个字段,以及只读文本字段,而不是输入字段。如果初始表单中的值为true,我还希望激活布尔字段plan_delete = True的记录,如果表单已提交,我可以在视图中添加更多带有plan_delete布尔值的记录。它看起来应该是这样的。

Record        Date        Comment           Attached       
John Doe      01/02/2017  Current           3           (checkbox)
Peter Piper   02/01/2017  Bla. bla          5           (checkbox)
Etc..         11/12/2017  Etc..             0           (checkbox)

Add to delete schedule (submit)

我尝试过使用表单as_table和modelform,但似乎很简单的东西很快变得非常复杂。

所以我的问题是,我的方式是正确的,最简单的方法 - 或者我是否遗漏了一些简单的关于form.form或modelform添加到forms.py的好处?如何渲染包含所有记录的表单,以及plan_delete字段的复选框 - 以便我可以在视图中处理它。

1 个答案:

答案 0 :(得分:0)

在您的视图中,您可以使GET函数返回一个窗体,其窗口小部件属性设置为readonly,如下所示:self.fields['sku'].widget.attrs['readonly'] = True