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

Set Months and Day Ranges for SelectDateWidget in Django

我有一个 Django 形式的 SelectDateWidget,它应该只允许用户 select 某几年前的日期。如何限制小部件中的月份和日期?例如,当当前日期为 1 月 28 日时,最后可能年份出生的用户不应 select 1 月 1 日。同样,不应允许最近可能年份出生的用户 select ] 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)))

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

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

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)