这是我的模特:
class User(models.Model):
email = models.EmailField(db_index=True, unique=True)
password = models.CharField(max_length=160, blank=True)
即使电子邮件无效,此代码也不会抛出ValidationError:
user = User(email='invalid e-mail address', 'password'='password_hash')
user.save()
为什么?
答案 0 :(得分:3)
您需要调用.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.']}
的文档
请注意,调用时不会自动调用full_clean() 你的模型的save()方法。你需要手动调用它 想要为您自己手动创建的一步模型验证运行 模型。
答案 1 :(得分:1)
因为你必须使用ModelForm,或者覆盖你的save方法并在保存用户之前调用full_clean()
方法。