【问题标题】:Django SelectDateWidgetDjango 选择日期小部件
【发布时间】:2022-01-26 19:21:13
【问题描述】:
date_range = 100    
this_year = date.today().year
birth_date= forms.DateField(label='What is your birth date?', widget=forms.SelectDateWidget(years=range(this_year - date_range, this_year+1)))

我只想选择距今天 100 年的日期。但我目前可以获得像 Dec 31 2021 这样的值,有时月份和日期与正确的值不匹配。

【问题讨论】:

    标签: django date


    【解决方案1】:

    Django 期望SelectDateWidget 中的years 参数有一个列表或元组。 尝试:

    this_year = date.today().year
    year_range = [x for x in range(this_year - 100, this_year + 1)]
    birth_date = forms.DateField(
        label="What is your birth date?",
        widget=forms.SelectDateWidget(years=year_range),
    )
    

    如果您想检查特定范围内的选定日期,请添加表单字段验证器。下面是一个简单的 100 年前计算示例:

    from datetime import datetime, timedelta
    
    class YourForm():
        ...
    
        def clean_birth_date(self):
            birth_date = self.cleaned_data['birth_date']
    
            today = datetime.today()
            first_date = today - timedelta(days=100 * 365)
    
            if not (first_date < birth_date < today):
                raise ValidationError("Please select a date within the last 100 years")
    
            return data
    

    【讨论】:

    • Stills 获取超过今天的天/月的值
    • 对于年份,您只过滤年份。不是几天或几个月。我认为最好添加一个表单字段验证器来根据您的限制检查所选日期。
    • 添加了表单字段验证示例。
    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2012-06-10
    相关资源
    最近更新 更多