Django 如何在按钮上的SelectDateWidget中设置月、年和日的名称?

Django 如何在按钮上的SelectDateWidget中设置月、年和日的名称?,django,Django,形式: bir_date = DateField(widget=SelectDateWidget(years=range(1900, 2020), label="") 但直到我并没有按下月、日或年的下拉列表,按钮看起来是这样的(---) 如何使它不显示(--),而是显示('月'、'年'、'日)?不幸的是,您将需要子类化SelectDateWidget。您将在中看到,none\u值在init函数中不可更改 以下是一个未经测试的示例: from django.forms.extras.widget

形式:

bir_date = DateField(widget=SelectDateWidget(years=range(1900, 2020), label="")
但直到我并没有按下月、日或年的下拉列表,按钮看起来是这样的(---)


如何使它不显示(--),而是显示('月'、'年'、'日)?

不幸的是,您将需要子类化
SelectDateWidget
。您将在中看到,
none\u值在init函数中不可更改

以下是一个未经测试的示例:

from django.forms.extras.widgets import SelectDateWidget

class CustomSelectDateWidget(SelectDateWidget):
    def get_none_value(self, field):
        return {
            "year": "Year",
            "month": "Month",
            "day": "Day",
        }[field]

    def create_select(self, name, field, value, val, choices):
        if 'id' in self.attrs:
            id_ = self.attrs['id']
        else:
            id_ = 'id_%s' % name
        if not (self.required and val):
            choices.insert(0, self.get_none_value(field))
        local_attrs = self.build_attrs(id=field % id_)
        s = Select(choices=choices)
        select_html = s.render(field % name, val, local_attrs)
        return select_html

如果您想使其更加灵活,可以重写init函数以传入无值字典,并在
get\u none\u value
中使用它(如果有)。

我不明白如何重写init函数您只需定义
def\u init\u(self,attrs=none,years=none,required=True):
在新类中。我这样做,但在函数中我不知道我必须做什么。