【问题标题】:Integrate calendar widget in Django app在 Django 应用程序中集成日历小部件
【发布时间】:2012-09-16 18:40:11
【问题描述】:

如何在我的系统中集成日历小部件?我希望将日历小部件添加到我的表单中,该表单是用 Django 设计的。我附上了一个屏幕截图,显示了我想在哪里集成它。另外,我希望日历小部件类似于http://www.dynarch.com/projects/calendar/

我需要修改什么文件,需要使用什么代码?

【问题讨论】:

标签: django calendar datepicker


【解决方案1】:

forms.py

import datetime
from django.forms.extras.widgets import SelectDateWidget
from django.forms import ModelForm, Form

date_field = forms.DateField(widget=SelectDateWidget)

否则还有另一种使用Javascript的方法Using Django time/date widgets in custom form 这可能会有所帮助

【讨论】:

  • 它总是说 'DateField' 对象没有属性 'needs_multipart_form'.. 我能做些什么来纠正它?
  • SelectDateWidget 是理想的选择。为什么关于同一问题的其他无数线程都没有提到它??
【解决方案2】:

我想通了。您只需要在 settings.py 中激活管理界面并在 forms.py 文件中导入 AdminDateWidget 而不是 SelectDateWidget。此外,将以下代码插入到表单的模板文件中。确保将其放在标签之间。这是代码:

<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="/static/admin/js/core.js"></script>
<script type="text/javascript" src="/static/admin/js/admin/RelatedObjectLookups.js">        </script>
<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
<script type="text/javascript" src="/static/admin/js/actions.min.js"></script>
<script type="text/javascript" src="/static/admin/js/calendar.js"></script>
<script type="text/javascript" src="/static/admin/js/admin/DateTimeShortcuts.js"></script>

希望它对某人有用,干杯!

萨达特

【讨论】:

    【解决方案3】:

    经过长时间的努力,我设法让它在 Django 2.0.2 上运行。您需要在模板标题中添加以下内容:

    <script type="text/javascript" src="/jsi18n/"></script>
    <script type="text/javascript" src="{% static 'admin/js/core.js' %}"></script>
    <script type="text/javascript" src="{% static 'admin/js/admin/RelatedObjectLookups.js' %}"></script>
    
    <link rel="stylesheet" type="text/css" href="{% static 'admin/css/forms.css' %}"/>
    <link rel="stylesheet" type="text/css" href="{% static 'admin/css/base.css' %}"/>
    <link rel="stylesheet" type="text/css" href="{% static 'admin/css/widgets.css' %}"/>

    urls.py

    from django.views.i18n import JavaScriptCatalog
    
    
    urlpatterns = [
        ...
        path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'),
    
    ]
    

    然后是forms.py

    from django import forms
    from .models import MyModel
    from django.contrib.admin.widgets import AdminDateWidget
    
    
    class TripDetailForm(forms.ModelForm):
        class Meta:
            model = MyModel
            fields = '__all__'
            widgets = {
                'my_field': AdminDateWidget(),
    }
    

    有了这段代码,你一定很高兴。

    【讨论】:

    • 这对我不起作用,但我没有收到任何错误。我的日期字段的表单是小部件仍然是一个文本框。我正在使用 {{ form.as_p }} 进行渲染
    • 我能够通过再添加两行 &lt;script type="text/javascript" src="{% static 'admin/js/calendar.js' %}"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="{% static 'admin/js/admin/DateTimeShortcuts.js' %}"&gt;&lt;/script&gt; 让它工作
    • @MarkChackerian 这些行可以用这个标签 {{form.media}} 替换,它更短
    • 只是提醒一下,您不需要这些行。这只会弄乱你的表格。 &lt;link rel="stylesheet" type="text/css" href="{% static 'admin/css/forms.css' %}"/&gt; &lt;link rel="stylesheet" type="text/css" href="{% static 'admin/css/base.css' %}"/&gt;
    【解决方案4】:

    只是给使用 Django_filters 的人的提示,他们希望管理员日历显示在日期字段上(Ex Date 大于).. 您需要在您的过滤器中声明小部件创建 .

    像这样:

    class InterviewFilter(django_filters.FilterSet):
    
        start_date = django_filters.DateFilter(name='date',lookup_expr=('gt'), widget=AdminDateWidget())
        end_date = django_filters.DateFilter(name='date',lookup_expr=('lt'), widget=AdminDateWidget()) 
        registry_year = django_filters.DateRangeFilter(field_name='date', lookup_expr='year')
    
        class Meta:
            model = Interview
            fields = ['position', 'result', 'status']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 2022-06-14
      • 2016-09-13
      • 1970-01-01
      相关资源
      最近更新 更多