dar*_*rse 3 django django-models
我有一个模型,其中一个字段需要字母数字字符。我使用验证器强制执行此约束。像这样的东西:
from django.core.validators import RegexValidator
validate_alphanumeric = RegexValidator(r'^[a-zA-Z0-9]*$', 'Only alphanumeric characters are allowed.')
class MyModel(models.Model):
my_field = models.CharField(max_length=255, validators=[validate_alphanumeric,]
def save(self, *args, **kwargs):
# self.call_validators() or whatever
super(MyModel, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
现在,这会在我的管理站点和模型表单中自动运行。但是,当我从 shell 创建对象时,或者说手动 API 端点时,验证器不会被强制执行。
django 中是否有像我评论中那样的内置函数,我可以在 save 方法中调用它?或者我是否必须在保存方法中再次手动验证我的字段?谢谢。
这是验证对象文档。基本上,如果您调用对象的full_clean()方法,您将对该对象运行所有验证。您可以通过调用仅运行单个字段验证器self.clean_fields()。
但一般来说,在方法中添加验证并不是一个好的做法save()。原因是在大多数 Django 应用程序中,您将创建一个表单 (a ModelForm),它将调用验证方法,并能够在验证失败时向用户返回有意义的内容。
当调用模型的save()方法时,为时已晚,无法向用户显示某些内容,因此您只能raise在此时抛出异常(并崩溃)。
form.is_valid()正常的过程(管理表单使用的)是:通过调用(调用模型)来验证表单full_clean(),然后当且仅当表单有效时,保存模型。
shell 不是常规交互方法,应非常小心地使用,因为它绕过了应用程序的正常流程。
| 归档时间: |
|
| 查看次数: |
3167 次 |
| 最近记录: |