设置夹层内联日期编辑器的年份范围

时间:2019-01-25 09:31:34

标签: django mezzanine

我无法为日期时间字段配置夹层内联编辑。

我在页面中有一个类似这样的字段(如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属性,但是,由于它是由Mezzanine自动生成的,因此我没有任何直接访问权限。如何通过夹层嵌入式编辑代码为Django小部件设置参数?

1 个答案:

答案 0 :(得分:3)

我认为没有简单的方法可以做到这一点,但这是一种可能有用的方法。

Mezzanine寻找FORMS_EXTRA_WIDGETS设置,可用于定义自定义窗口小部件。 from the code是最好的了解方式。

此处定义的小部件用于呈现内联编辑器表单,因此您应该能够提供自己的小部件。无法为小部件提供初始化参数,因此您需要将默认的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')
]

很明显,这将替换夹层呈现的所有表单上所有日期字段的小部件使用。如果不重写很多内联编辑器逻辑,我看不出有专门针对一个领域的任何方法。