Установка диапазона лет для встроенного редактора дат в мезонине - PullRequest
0 голосов
/ 25 января 2019

У меня проблемы с настройкой встроенного редактирования мезонина для полей даты и времени.

У меня на странице есть что-то вроде этого (как в http://mezzanine.jupo.org/docs/inline-editing.html)

{% editable page.project.start %}
  {{ page.project.start|date:'Y M'}}
{% endeditable %}

Однако виджет показывает только 9 будущих лет (как указывает https://docs.djangoproject.com/en/2.1/ref/forms/widgets/#selectdatewidget), поэтому невозможно вводить какие-либо даты в прошлом.

Мне нужно установить атрибут years дляк этому виджету, однако, у меня нет прямого доступа к нему, так как он автоматически генерируется мезонином. Как я могу установить аргументы для виджетов Django через встроенный код редактирования мезонина?

1 Ответ

0 голосов
/ 30 января 2019

Я не думаю, что есть простой способ сделать это, но вот один из подходов, который может помочь.

Мезонин ищет параметр FORMS_EXTRA_WIDGETS, который можно использовать для определения пользовательских виджетов. Как это работает лучше всего понять из кода .

Определенные здесь виджеты - это то, что используется для визуализации встроенных форм редактора, поэтому вы должны иметь возможность предоставлять свои собственные. Нет способа предоставить аргументы инициализации для виджета, поэтому вам нужно будет создать подкласс по умолчанию SelectDateWidget и переопределить его __init__ метод, что-то вроде:

class CustomSelectDateWidget(SelectDateWidget):

    def __init__(self, attrs=None, years=None, months=None, empty_label=None):
        years = [2017, 2018, 2019]   # Provide your list of years here
        super().__init__(attrs, years, months, empty_label)

А затем передайте этот пользовательский виджет в настройку:

from mezzanine.forms.fields import DATE
FORMS_EXTRA_WIDGETS = [
    (DATE, 'dotted.path.to.CustomSelectDateWidget')
]

Очевидно, это заменит использование виджета для всех полей даты во всех формах, представленных мезонином. Я не вижу способа сделать это специально для одного поля без переписывания большого количества логики встроенного редактора.

...