我的日期小部件在forms.py中看起来像这样:

class DateInput(DateInput):
    input_type = 'date'


class TaskCreateForm(ModelForm):
    class Meta:
        model = TaskModel
        fields = '__all__'
        exclude = ('task_project',)
        widgets = {
            'task_baseline_start': DateInput(),
            'task_baseline_finish': DateInput(),
            'task_scheduled_start': DateInput(),
            'task_scheduled_finish': DateInput(),
            'task_real_start': DateInput(),
            'task_real_finish': DateInput(),
        }

问题是,每当有人将日期引入到太远的future /过go 时,应用程序的其他部分就会变得一团糟(比如图形和其他东西).

我试过以下方法:

class DateInput(DateInput):
    input_type = 'date'
    attrs = {'min': '2020-01-01'}

但这个小部件一直接受2020-01-01之前的日期.

编辑:如果我在每个"DateInput()"实例上设置属性,小部件将遵守限制,即:

class TaskCreateForm(ModelForm):
    class Meta:
        model = TaskModel
        fields = '__all__'
        exclude = ('task_project',)
        widgets = {
            'task_baseline_start': DateInput(attrs={'min':'2019-01-01'}),
            'task_baseline_finish': DateInput(attrs={'min':'2019-01-01'}),
            'task_scheduled_start': DateInput(attrs={'min':'2019-01-01'}),
            'task_scheduled_finish': DateInput(attrs={'min':'2019-01-01'}),
            'task_real_start': DateInput(attrs={'min':'2019-01-01'}),
            'task_real_finish': DateInput(attrs={'min':'2019-01-01'}),
        }

现在这个代码伤害了我的感情,我觉得完全不尊重枯燥的标准.有没有更好的方法只设置一次约束?

谢谢!

推荐答案

小部件不查看attrs class属性.您可以将其添加到克隆中,以便:

class DateInput(DateInput):
    input_type = 'date'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.attrs.setdefault('min', '2020-01-01')

通过使用.setdefault(…) [Python-doc],如果在构造DateInput对象时指定一个值,它将不会覆盖其他值.

注意,一个小部件是由Django验证的.因此,您仍然应该在模型(或表单字段)中添加验证器,以防止伪造请求.

Python相关问答推荐

时间序列分解

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

如何避免Chained when/then分配中的Mypy不兼容类型警告?

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

运行总计基于多列pandas的分组和总和

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

计算分布的标准差

考虑到同一天和前2天的前2个数值,如何估算电力时间序列数据中的缺失值?

使用Python从rotowire中抓取MLB每日阵容

在Python中使用yaml渲染(多行字符串)

人口全部乱序 - Python—Matplotlib—映射

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

如何合并具有相同元素的 torch 矩阵的行?

使用tqdm的进度条

Python类型提示:对于一个可以迭代的变量,我应该使用什么?

普洛特利express 发布的人口普查数据失败

如何使用Polars从AWS S3读取镶木地板文件

当lambda函数作为参数传递时,pyo3执行