11

私は次のモデルを持っています:

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)

シェルでは、full_cleanを指定すると検証エラーが発生しますが、保存するとエラーがスローされるのではなく保存されます。なんでそうなの?私はdjango1.3とpython2.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()
4

1 に答える 1

25

ドキュメントはこれについて明示的です

モデルを保存してもバリデータは自動的に実行されませんが、ModelForm を使用している場合は、フォームに含まれるすべてのフィールドでバリデータが実行されることに注意してください。

フォームを使用していない場合は、保存する前に clean メソッドを呼び出す必要があります。

モデルバリデーターの呼び出しは、次のように強制できます。

model_instance.full_clean()
于 2012-08-03T07:43:14.430 に答える