Django:只清理特定的模型字段?

Cis*_*tin 4 python django validation

我有一个 Django 模型,例如:

class MyModel(models.Model):
   no_validation = models.PositiveIntegerField(null=True, db_index=True)
   yes_validation = models.CharField(max_length=254, validators=[my_validator])
Run Code Online (Sandbox Code Playgroud)

我还有一个预先保存的钩子,类似于:

@receiver(pre_save, sender=MyModel)                                        
def run_full_clean(sender, instance, **kwargs):                                 
   instance.clean_fields() 
Run Code Online (Sandbox Code Playgroud)

我的问题是这种当前的方法会清理所有领域。我只想清理一个特定字段(称为 yes_validation 的字段)。有没有简单的方法来做到这一点?

我只知道exclude参数,但问题是我的班级有近一百个不同的字段,因此排除每个字段都会有点脏。

Sha*_*ang 6

您可以覆盖clean方法而不是使用clean_fields方法。引用django 文档

模型.clean()

此方法应用于提供自定义模型验证,并根据需要修改模型上的属性。例如,您可以使用它自动为字段提供值,或者执行需要访问多个字段的验证。

我不确定这种验证方式,因为我并不真正支持验证模型上的数据。对我来说,模型只是定义数据的数据库模式,您应该尽力验证输入源上的数据,最常用的一种是Form. Django 表单有很好的 api 来验证数据,所以我建议花时间在上面而不是使用pre_save信号。这也将使调试更容易。