在Django中设置SelectDateWidget的月份和日期范围

时间:2016-01-29 00:47:25

标签: python django date django-forms

我有一个Django形式的SelectDateWidget,它应该只允许用户选择几年前的日期。如何限制小部件中的月份和天数?例如,在当前日期是1月28日时,在最后一年出生的用户不应该选择1月1日。同样,当前日期是当前日期时,不应允许在最近可能年份出生的人选择2月1日。 1月28日。

这是我的表格:

class Form(forms.Form):
    birthday = forms.DateField(widget=SelectDateWidget(empty_label=('Year', 'Month', 'Day'), years=range(datetime.date.today().year-22, datetime.date.today().year - 15)))

如何设置表单中允许的月份和日期?

1 个答案:

答案 0 :(得分:1)

我不确定您的小部件的规则是什么,但您始终可以使用表单构造函数动态创建字段:

class FooForm(forms.Form):
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        super(FooForm, self).__init__(*args, **kwargs)
        if user:
            # calculate the list of years based on user's information and the rules you have
            # e.g. years = range(2010, 2016)
            self.fields['birthday'] = forms.DateField(widget=SelectDateWidget(empty_label=('Year', 'Month', 'Day'), 
                                                      years=years))

然后在你的观点中你做:

def views(request):
    form = FooForm(request.POST or None, user=request.user)