这是我的模型:
class User(models.Model):
email = models.EmailField(db_index=True, unique=True)
password = models.CharField(max_length=160, blank=True)
Run Code Online (Sandbox Code Playgroud)
即使电子邮件无效,此代码也不会引发 ValidationError:
user = User(email='invalid e-mail address', 'password'='password_hash')
user.save()
Run Code Online (Sandbox Code Playgroud)
为什么?
您需要调用.full_clean()方法来适当地验证属性。否则,记录将直接存储在 DB 中。
>>> u=User(email="something", username='x', password="p")
>>> u.full_clean()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/django/db/models/base.py", line 824, in full_clean
raise ValidationError(errors)
ValidationError: {'email': [u'Enter a valid e-mail address.']}
Run Code Online (Sandbox Code Playgroud)
从文档 full_clean()
请注意,当您调用模型的 save() 方法时,不会自动调用 full_clean()。当您想为自己手动创建的模型运行一步模型验证时,您需要手动调用它。
| 归档时间: |
|
| 查看次数: |
645 次 |
| 最近记录: |