2

我正在使用 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 结合起来需要一种动态的方式来访问表单字段,这对我来说提出了两个问题:

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

0 回答 0