我正在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()
,但是小提琴的解决方案更好)。
答案 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"}'
})