AdminDateWidget 简介
AdminDateWidget是admin自带的日历小控件,在admin应用程序中用于Datefield字段,其效果如下图所示:

AdminDateWidget位于django.contrib.admin.widgets.py中。
在其它应用程序中使用AdminDateWidget
使用AdminDateWidget需要修改form及模板。
修改form
首先,导入AdminDateWidget:from django.contrib.admin.widgets import AdminDateWidget
然后,重设DateField字段的widget:
class TestForm(forms.Form):
start_time = forms.DateField(widget=AdminDateWidget, label='start time')
修改模板
假设模板名称为history.html。
在history.html的head中,增加{{ form.media }}
其中,form为views.py中定义的view返回值传递的TestForm实例,即:
def testwidget(request):
form = TestForm()
return render(request, 'myapp/history.html', {'form': form})
form.media可以被render渲染为:<script type="text/javascript" src="/static/admin/js/calendar.js"></script>
<script type="text/javascript" src="/static/admin/js/admin/DateTimeShortcuts.js"></script>
因此,也可以直接在head中增加上述两个JavaScript语句而不使用{{ form.media }}
。
要使上述两个语句实现功能,还需要以下CSS及JavaScript(放在上述两个语句之前)。
{% load static %}
<link rel="stylesheet" type="text/css" href="/static/admin/css/forms.css" />
<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/core.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
<script type="text/javascript" src="/static/admin/js/admin/RelatedObjectLookups.js"></script>
<script type="text/javascript" src="/static/admin/js/actions.js"></script>
<script type="text/javascript" src="/static/admin/js/vendor/xregexp/xregexp.js"></script>
即可实现功能。
备注:
本文html只实现了功能,不符合Django html模板语言设计规范。