Настройка выбора даты в Django Admin - PullRequest
5 голосов
/ 03 марта 2011

Как мне настроить средство выбора даты по умолчанию в Django Admin?

Я хочу удалить ссылку «сегодня» и установить значение месяца в графическом окне выбора, отличное от текущего месяца.

Ответы [ 2 ]

5 голосов
/ 06 марта 2011

Попробуйте написать свой собственный виджет, а затем переопределите свой так:

class CustomerAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.DateField: { 'widget': AdminDateWidget },
    }
0 голосов
/ 16 июля 2019

Мне удалось настроить виджет даты по умолчанию в админке Django.Я следовал двум урокам (из Простой лучше, чем сложный и Пользовательский виджет Django )

  1. Написать собственный виджет в файле с именем 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, как показано в приведенном выше коде.В этом случае это добавляет стили для пользовательского выбора даты .

Определите шаблон для вашего виджета, для получения дополнительной информации о параметрах выбора даты смотрите здесь , поместите этот файл в 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.Имейте в виду, что это просто руководство, вы можете пойти дальше, ознакомившись с двумя указанными мною учебниками.

Примечание: реализация этого виджета также поддерживает интернационализацию.

...