在Django中动态呈现矩阵形式的矩阵

时间:2018-10-29 21:25:55

标签: python django django-templates

我正在使用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使用Django CreateView提供的格式显示了不包含的内容:

<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。按照this的说明,可以使用form.<field_name>访问单个表格。将其与html结合使用将需要一种动态的方式来访问表单字段,这对我提出了两个问题:

  1. 遵循this的建议,我能够为与我的模型一起使用的模板实现getattr功能,但是在CreateView提供的form上失败(例如{{form|getattribute:'MON00'}})。我想念什么?
  2. 由于我无法在模板中连接日期和小时字符串({{form|getattribute:d+h}}将不起作用),访问所需表单字段的合适方法是什么?

0 个答案:

没有答案