我正在尝试将日历日期输入添加到我的某个表单中。 Django在其管理页面上使用了一个精彩的日历小部件,但我无法弄清楚如何将其添加到自定义表单中。
我在这里找到了关于同一主题的其他几个问题,但它们似乎都已过时,复杂且无法正常工作。
有没有办法将Django的内置日历小部件包含在我的一个表单中?
答案 0 :(得分:17)
考虑使用普通" SelectDateWidget"而不是Admin小部件。内置于Django:https://docs.djangoproject.com/en/stable/ref/forms/widgets/#selectdatewidget
答案 1 :(得分:10)
我想通了,感谢Dave S.和一些关于这个主题的老帖子。我成功的方法:
在顶部,使用from django.contrib.admin.widgets import AdminDateWidget
导入管理窗口小部件。然后,只要您想使用日期窗口小部件,就可以使用my_field = DateField(widget = AdminDateWidget)
添加表单的不同字段。
将以下内容放在顶部以包含相应的css / js文件:
{% load i18n admin_modify adminmedia %}
{% block extrahead %}{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/base.css" />
<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/widgets.css" />
<script type="text/javascript" src="/jsi18n/"></script>
<script type="text/javascript" src="{% admin_media_prefix %}js/core.js"></script>
{{ form.media }}
{% endblock %}
注意:根据您的Django版本以及如何实现表单字段,您不一定需要所有这些。这就是我发现我需要使用小部件。
现在只需输出您的表单,JS就会自动将其转换为日期字段。享受!
答案 2 :(得分:8)
django-admin使用的所有小部件都在django / contrib / admin / widgets.py文件中。只需将其用作表单中的常用窗口小部件即可。你想要的是AdminDateWidget。
from django.contrib.admin.widgets import AdminDateWidget
from django.forms.fields import DateField
class MyForm(Form):
my_field = DateField(widget=AdminDateWidget)
这将创建一个带日历的日期选择器。您可以尝试通过扩展它来自定义它,或者从头开始创建一个新的小部件,其灵感来自AdminDateWidget。
答案 3 :(得分:1)
您可以通过表单小部件“SelectDateWidget()”执行此操作,如下例所示:
class MyForm(forms.Form):
start_date=forms.DateField(widget = forms.SelectDateWidget())
end_date=forms.DateField(widget = forms.SelectDateWidget())
答案 4 :(得分:0)
这基本上是Using Django time/date widgets in custom form的副本。
@Dave S和@MrGlass给出了答案,但对于Django 1.2及更高版本,此外还需要帮助JavaScript找到管理媒体:
{% load adminmedia %} /* At the top of the template. */
/* In the head section of the template. */
<script type="text/javascript">
window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";
</script>