You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中实现禁止选择过往日期的日期选择器

在Django中限制日期选择器只能选当前/未来日期

你完全可以通过Django直接实现这个需求,核心是利用原生HTML5 date输入框的min属性,通过Django的表单组件设置该属性即可,无需额外引入JavaScript或Bootstrap。

实现方法

方式一:修改DateInput类,全局添加min属性

修改你的DateInput类,在初始化时自动设置min属性为当前日期:

from django.utils import timezone
from django import forms

class DateInput(forms.DateInput):
    input_type = 'date'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 将min属性设为当前日期(ISO格式:YYYY-MM-DD)
        self.attrs['min'] = timezone.now().date().isoformat()

方式二:在表单的widget配置中单独设置

如果不想修改全局的DateInput类,也可以在BookingForm的widgets里直接传递attrs参数:

class BookingForm(forms.ModelForm):
    class Meta:
        model = Booking
        fields = ['check_in_date', 'check_in_time', 'check_out_time', 'person', 'no_of_rooms']
        widgets = {
            'check_in_date': DateInput(attrs={'min': timezone.now().date().isoformat()}),
            'check_in_time': TimeInput(),
            'check_out_time': TimeInput(),
        }
    # 你的clean方法保持不变...

关键说明

  1. 前端限制:设置min属性后,原生日期选择器会自动禁用所有早于当前日期的选项,用户无法选择过去的日期。
  2. 后端验证:你已实现的clean方法必须保留,因为前端限制可以被绕过(比如修改HTML源码),后端验证是确保数据合法性的最后防线。

内容的提问来源于stack exchange,提问作者Anshul Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:05:25