【问题标题】:selectdatewidget set default month and dayselectdatewidget 设置默认月份和日期
【发布时间】:2012-09-13 05:24:54
【问题描述】:

如何将 selectDateWidget 日期和月份选项设置为默认为 1 月 1 日,但保持年份选项不变。

现在我在做:

day = datetime.date.today()
lessTime = forms.DateField(required=False, widget=SelectDateWidget(years=range(1980, 2013)), initial=day)

但这会将默认设置为实际日期。我可以更改什么来获得所需的默认选项?

提前致谢

【问题讨论】:

    标签: django django-forms django-widget


    【解决方案1】:

    制作自定义小部件,例如 MySelectDateWidget

    class MySelectDateWidget(SelectDateWidget):
        def render(self, name, value, attrs=None):
            from collections import namedtuple
            date_tweak = namedtuple('Date', 'year month day')
            date_value = date_tweak(None, 1, 1) #tweak to cheat SelectDateWidget's 
                                       #render method which expects a datetime object
            return super(MySelectDateWidget, self).render(name, date_value, attrs)
    

    然后替换:

    lessTime = forms.DateField(required=False,    
              widget=SelectDateWidget(years=range(1980, 2013)), initial=day)
    

    与:

    lessTime = forms.DateField(required=False,          
                               widget=MySelectDateWidget(years=range(1980, 2013)))
    

    【讨论】:

    • 这在设置默认选项时效果很好,但现在我的 Django 表单说它在提交后无效。 form = ContactForm(request.POST) form.is_vaild() >>> form == False 我可以改变什么来完成这项工作?
    • 2020:如果您使用的是 Django 3(或者可能是 2 的更高版本),MySelectDateWidget/1 中的 render 方法都应该是 renderer
    猜你喜欢
    • 2016-12-20
    • 2016-05-06
    • 2012-02-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多