我正在使用django-bootstrap3
(pip install django-bootstrap3
)第三方应用程序来呈现表单。我正在使用django-bootstrap-datepicker
(pip install django-bootstrap-datepicker
)应用程序来应用小部件日历。
在下面的表单中,我有两个字段:check_in
和check_out
我想要将日期选择器应用于一起
from bootstrap_datepicker.widgets import DatePicker
class DateInput(DatePicker):
def __init__(self):
DatePicker.__init__(self,format="%Y-%m-%d")
def build_attrs(self, attrs, extra_attrs=None, **kwargs):
attrs = dict(self.attrs, **kwargs)
if extra_attrs:
attrs.update(extra_attrs)
return attrs
class LodgingOfferForm(forms.ModelForm):
class Meta:
widgets = {
'check_in': DateInput(),
'check_out': DateInput(),
}
model = LodgingOffer
fields = ('other fields', 'check_in', 'check_out', )
在html模板上,我呈现这种形式,包括form.media
接受bootstrap-datepicker
的js和css效果:
{% load bootstrap3 %}
{% block body_content %}
{% block extrahead %} {# Extra Resources Start #}
{{ form.media }} {# Form required JS and CSS #}
{% endblock %}
{% bootstrap_field form.check_in %}
{% bootstrap_field form.check_out %}
{% endblock %}
当我尝试渲染我的表单时,日期选择器效果仅适用于表单中呈现的第一个字段,这意味着只有check_in
字段具有日期选择器效果和check_out
领域没有它。
更新
我在浏览器中执行检查,发现check_in
和check_out
字段具有相同的ID _pickers
,并且JS代码调用了找到的第一个_pickers
如何修改每个字段的ID,并且to widget to order to together字段?
答案 0 :(得分:1)
我已经通过这种方式更改了身份pickers
:
class LodgingOfferForm(forms.ModelForm):
class Meta:
widgets = {
'check_in': DateInput(),
'check_out': forms.DateInput(attrs={'id': 'datepicker2'}),
'country': CountrySelectWidget(),
}
model = LodgingOffer
fields = ('check_in', 'check_out', )
在我的模板中,我以这种方式覆盖或调用datepicker
函数:
<script type="text/javascript">
$(function () {
$('#datepicker2').datepicker({
inline: true,
sideBySide: true,
// format: 'DD.MM.YYYY'
});
});
</script>
通过这种方式,我可以看到不同的ID和我的日历选择器一起工作