如何在月份,年份和日期的按钮上设置SelectDateWidget中的名称?

时间:2014-05-17 17:36:23

标签: django

表格:

bir_date = DateField(widget=SelectDateWidget(years=range(1900, 2020), label="")

但是直到我没有按下月份,日期或年份的下拉列表,按钮看起来像这样(---)。

如何使其显示(---)但显示('月','年',日)?

1 个答案:

答案 0 :(得分:1)

不幸的是,您需要继承SelectDateWidget。您将在django source中看到,{init}功能中无法更改none_value

这是一个未经测试的例子:

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函数来传入一个none_value字典,并在get_none_value中使用它(如果它存在的话)。