Django 表单字段基于 UpdateView 或 CreateView 的不同清理逻辑

时间:2021-07-05 00:45:16

标签: django django-views django-forms django-class-based-views

我在 Django 中有一个表单,它用于 CreateView 和 UpdateView。字段之一是 hours_allocated 不能 < 0。在我的模型中,我已将其声明为:

hours_allocated= models.DecimalField(max_digits=10, decimal_places=2, validators=[MinValueValidator(Decimal('0.0')), MaxValueValidator(Decimal('24.00'))])

当记录更新 (UpdateView) 时,这很好。但是,在 CreateView 中,我想确保该值 > 0(不是 UpdateView 中允许的 = 0.0)。如果我添加一个 clean_hours_allocated() 方法来检查该值是否 > 0,则它同时适用于 CreateView 和 UpdateView。

有没有办法根据表单是在 UpdateView 还是 CreateView 中使用而在表单级别进行不同的验证?或者,有没有办法在视图本身中正确处理验证?

1 个答案:

答案 0 :(得分:0)

我不是 Django 专家。不过,我认为您可以在 forms.py 中执行类似的操作。

def clean_hours_allocated(self):
    if not self.instance.pk: # Update instances have a pk and wouldn't go in this.
        ## Logic to validate Create Instances

    return hours_allocated

我认为这不是完美的解决方案,但我相信这应该可以完成您的任务。

相关问题