2017-08-08 56 views
0

我在Django(Django 1.11.2,python 3.5.3)中编写了一个表单。我对它产生的html不满意 - 我在一些外部库中找到了更好的输入元素。如何自定义由django表单域产生的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

所以,你可以使用[控件调整(https://stackoverflow.com/questions/45023799/custom-authentication- form-does-not-apply-bootstrap-css/45023977#45023977)给你的表单css类。用那些你可以风格的形式。对于forms.py中的占位符集属性。 – hansTheFranz

回答

3

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

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

这个工程。它甚至允许将'type =“text”'覆盖到'type =“date”'中 – MateuszL

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"}' 
    })