覆盖验证功能django

时间:2014-11-08 04:49:47

标签: python django

在我的forms.py中 我有一个类Taskform,这是类

中的一个函数
def clean(self):
    cleaned_data = super(TaskForm, self).clean()
    start_date = cleaned_data.get('start_date')
    end_date = cleaned_data.get('end_date')
    if start_date and end_date:
        if start_date >= end_date:
            raise forms.ValidationError(_("'End date' must be after 'Start date'"))
    admin_time = cleaned_data.get('admin_time')
    if admin_time:
        cleaned_data['execution_time'] = admin_time
    return cleaned_data

我想要做的是 - 只要输入admin_time,就用admin_time替换执行时间。

Models.py 我有像这样定义的execution_time:

execution_time = models.IntegerField(
    choices=((i, i) for i in (15, 30, 45, 60)),
    blank=False,
    default=30,
    verbose_name='estimated time'

如果我将选项(15,30,45,60)中的值赋予admin_time,则会运行有效函数。但是,如果为admin_time提供了任何其他值,则会给出无效选择。

如何覆盖验证选项并更新数据?

1 个答案:

答案 0 :(得分:0)

您可以覆盖“ChoiceField”中的方法“validate”,而不对列表“choices”表单元素中的状态进行任何检查,并对“清理”表单的方法进行基本检查。为了能够访问“选项”中的项目列表,通常会在模型属性“选项”的级别添加,该选项将在“MyModel.CHOICES”上提供。