为 Mezzanine 内联日期编辑器设置年份范围

Setting year range for Mezzanine inline date editor

我在为日期时间字段配置夹层内联编辑时遇到问题。

我在页面中有一个类似这样的字段(如 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 自动生成的。如何通过 Mezzanine 内联编辑代码为 Django 小部件设置参数?

我认为没有简单的方法可以做到这一点,但这里有一种方法可能会有所帮助。

夹层寻找 FORMS_EXTRA_WIDGETS setting which you can use to define custom widgets. How this works is best understood 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')
]

显然,这将取代用于 Mezzanine 呈现的所有表单上所有日期字段的小部件。如果不重写大量内联编辑器逻辑,我看不出有什么方法可以专门针对一个字段执行此操作。