我正在使用 Django 模型来表示日-小时组合。目标是呈现一个类似于矩阵的形式,其中 x 轴上的天数和 y 轴上的小时数。用户可以检查每个组合以定义车辆在一周内何时可用。
该模型如下所示:
class TimeMatrix(models.Model):
MO00 = models.BooleanField(default=False)
MO01 = models.BooleanField(default=False)
MO02 = models.BooleanField(default=False)
MO03 = models.BooleanField(default=False)
....
SO22 = models.BooleanField(default=False)
SO23 = models.BooleanField(default=False)
我喜欢将来自 CreateView 的相应表单呈现为上述矩阵。执行此操作的 html 需要一个列表,days = ['MON', 'TUE', ..., 'SUN']以便hours = ['00', '01', ..., '23']动态呈现表单。以下 html 显示了这一点,但没有使用 DjangoCreateView提供的表单:
<form action="#">
<div class="table-responsive">
<table class="table">
<thead class="thead-light">
<tr>
<th scope="col">Day</th>
{% for h in hours %}
<th scope="col">{{h}}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for d in days %}
<tr>
<th scope="row" class="wt-col">{{d}}</th>
{% for h in hours %}
<td><input type="checkbox" name="{{d}}{{h}}" value="{{d}}{{h}}" id="id_{{d}}{{h}}"></td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
</form>
因为我喜欢使用 Django 表单中内置的安全措施,所以我喜欢使用form这些CreateView提供的内容。按照此说明,可以使用 访问单个表单form.<field_name>。将此与 html 结合起来需要一种动态的方式来访问表单字段,这对我来说提出了两个问题:
- 按照这个建议,我能够为适用于我的模型的模板实现 getattr 功能,但在
formCreateView 提供的(例如{{form|getattribute:'MON00'}})上失败了。我错过了什么? - 由于我无法在模板中连接日期和小时字符串(
{{form|getattribute:d+h}}将不起作用),访问所需表单字段的合适方法是什么?