如何自定义django表单字段生成的html

时间:2017-08-08 13:26:43

标签: django django-forms

我正在Django中编写一个表单(Django 1.11.2,python 3.5.3)。我对它产生的html不满意 - 我在一些外部库中找到了更好的输入元素。

我有forms.py:

class ReportForm(forms.Form):
    fromTime = forms.DateField(label="Od")
    toTime = forms.DateField(label="Do")

和html模板:

<form action="/report/selectDocument" method="post">
    {% csrf_token %}
    <table>{{ form.as_table }}</table>

    <input type="submit" value="Submit" />
</form>

共同产生:

<input type="text" name="fromTime" required id="id_fromTime" />
....
<input type="text" name="toTime" required id="id_toTime" />

虽然我想得到:

<input data-dependent-validation='{"from": "date-to", "prop": "max"}' type="date" id="fromTime" placeholder="RRRR-MM-DD" />
<input data-dependent-validation='{"from": "date-from", "prop": "min"}' type="date" id="toTime"   placeholder="RRRR-MM-DD" />

如何告诉django为表单字段生成这样的html?更改可以是全局的,但我更希望它是每个字段。

这些变化看起来很小,但我希望实现这样的目标:http://fiddle.jshell.net/KEfEX/37/我可以硬编码自定义输入元素,但我更喜欢使用django表单。然而,表单会产生相当差的日期输入 - 用户必须使用键盘来编写日期而不是使用鼠标选择(我知道widget=forms.SelectDateWidget(),但是小提琴的解决方案更好)。

2 个答案:

答案 0 :(得分:3)

您可以使用attrs参数为表单字段小部件设置其他属性。

fromTime = forms.DateField(widget=forms.DateInput(attrs={
    'data-dependent-validation': '{"from": "date-to", "prop": "max"}',
    'placeholder': 'RRRR-MM-DD'
}))

答案 1 :(得分:0)

您也可以使用__init__方法执行此操作:

def __init__(self, *args, **kwargs):
    super(ReportForm, self).__init__(*args, **kwargs)
    self.fields['fromTime'].widget.attrs({
        'placeholder': "RRRR-MM-DD",
        'data-dependent-validation': '{"from": "date-to", "prop": "max"}'
    })
    self.fields['toTime'].widget.attrs({
        'placeholder': "RRRR-MM-DD",
        'data-dependent-validation': '{"from": "date-from", "prop": "min"}'
    })