Django的模型验证工作不
问题描述:
我有以下型号:Django的模型验证工作不
class CardInfo(models.Model):
custid = models.CharField(max_length=30, db_index=True, primary_key = True)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
street = models.CharField(max_length=100)
building = models.CharField(max_length=100)
city = models.CharField(max_length=100)
state = models.CharField(max_length=100)
zipcode = models.CharField(max_length=100)
payment_method = models.CharField(max_length=100, null=True, blank=True)
amount = models.CharField(default = '0',max_length=10, null=True, blank=True)
valid_to_month = models.CharField(max_length=100, null=True, blank=True)
valid_to_year = models.CharField(max_length=100, null=True, blank=True)
def __unicode__(self):
return "Cust ID %s" %(self.custid)
在shell中,当我给full_clean我得到验证错误,但在保存它那得到保存,而不是抛出错误。为什么这样呢?我使用django1.3和Python 2.6:
c=CardInfo(custid="Asasasas")
c.full_clean()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/python2.6/lib/python2.6/site-packages/django/db/models/base.py", line 828, in full_clean
raise ValidationError(errors)
ValidationError: {'building': [u'This field cannot be blank.'], 'city': [u'This field cannot be blank.'], 'first_name': [u'This field cannot be blank.'], 'last_name': [u'This field cannot be blank.'], 'zipcode': [u'This field cannot be blank.'], 'state': [u'This field cannot be blank.'], 'street': [u'This field cannot be blank.']}
c.save()
答
注意验证器,当你保存模型将不会自动运行,但如果您使用的是的ModelForm,它会在您的表单中包含的任何字段上运行您的验证器。
如果您没有使用表单,则在保存之前调用clean方法是您的责任。
调用模型验证可以强制这样的:
model_instance.full_clean()
它应该给完整性错误。您的模型/数据库同步正确吗?您的应用程序的sqlall将有所帮助。 – Rohan 2012-08-03 04:59:51
是的,我已经做到了......没有改善 – 2012-08-03 05:02:13