django - 在 Django Admin 中自定义日期选择器

标签 django django-admin

如何在 Django Admin 中自定义默认日期选择器?

我想删除“今天”链接并将图形选择器中的月份值设置为当前月份以外的月份。

最佳答案

我能够在 Django 管理中自定义默认日期小部件。我遵循了两个教程(来自 Simple is Better than ComplexDjango Custom Widget)

  • 在名为 widgets.py 的文件中编写自定义小部件在您的 Django 应用程序中

  • from django.forms import DateInput
    
    
    class CustomDatePickerInput(DateInput):
        template_name = "app_name/widgets/custom_datepicker.html"
    
        class Media:
            css = {
                "all": (
                    "https://cdnjs.cloudflare.com/ajax/libs/datepicker/0.6.5/datepicker.min.css",
                )
            }
            js = (
                "https://code.jquery.com/jquery-3.4.1.min.js",
                "https://cdnjs.cloudflare.com/ajax/libs/datepicker/0.6.5/datepicker.min.js",
                "https://cdnjs.cloudflare.com/ajax/libs/datepicker/0.6.5/i18n/datepicker.es-ES.min.js",
            )
    
    

    请注意,您可能需要的 CSS 和 JS 文件应该添加到内部 Media 中。类如上面的代码所示。在这种情况下,它为自定义 date picker 添加样式.
  • 为您的小部件定义模板,有关更多日期选择器的选项,请参阅 here , 将此文件放入 app_name/templates/app_name/widgets/custom_datepicker.html或确保此模板与 template_name 的值匹配在您的自定义小部件中:

  • {% load i18n %}
    
    {% include "django/forms/widgets/input.html" %}
    {% get_current_language as LANGUAGE_CODE %}
    
    <script>
      $(function () {
        const DATE_PICKER_OPTIONS = {
          'en-us': {
            format: 'yyyy-mm-dd',
            language: ''
          },
          'es': {
            format: 'dd/mm/yyyy',
            language: 'es-ES'
          }
        };
        let options = DATE_PICKER_OPTIONS['{{ LANGUAGE_CODE }}'];
        $("input[name='{{ widget.name }}']").datepicker({
          format: options.format,
          language: options.language
        });
      });
    </script>
    

    在您的情况下,您应该添加选项 date (例如: date: new Date(2014, 1, 14) )因为您还询问如何选择另一个月份。
  • 在 Django 管理中注册模型时,您需要在日期字段中指明要使用的小部件(使用 formfield_overrides )

  • @admin.register(YourModel)
    class YourModelAdmin(admin.ModelAdmin):
        formfield_overrides = {models.DateField: {"widget": CustomDatePickerInput}}
    

    完成后,您将在 Django 管理中拥有一个用于日期的自定义小部件。请记住,这只是一个指南,您可以通过查看我指出的两个教程来进一步了解。

    注:这个小部件的实现也支持国际化。

    关于django - 在 Django Admin 中自定义日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5178431/

    相关文章:

    python - 是否有一个 django 管理小部件用于使用内联 through_model 添加多个外键

    python - 模型方法的详细名称

    django - 面临 South 和 Django "There is no South database module ' South.db.postgresql_psycopg 2' for your database."的问题

    python - 如何比较 Django 模板中的日期

    python - 如何最好地组织 Django 系统的规则组件?

    django - 如何在 Django admin 中处理一种父类(super class)型的多个子类型

    javascript - Django 管理员 : Alter how data is displayed

    Django - 基于父实例的内联字段值

    python - 为什么db_index=False时需要指定 key 长度?

    database - Django model.save() 不写入数据库