如何在实例化模型时检查是否没有为特定字段提供值会导致错误?

时间:2013-12-12 17:24:46

标签: django django-testing

from django.contrib.auth.models import User

>>> User._meta.get_field("username").null
False

但是

>>> user()
<User: >

WTH?我期望IntegrityError因为null值不允许存储在null=False的数据库中。

然后我读了this

  

Django从不为空CharField或TextField类型存储NULL。它   存储一个空字符串('')。所以这就是你没有得到的原因   IntegrityError for null = False。

好吧,那必须意味着有一个空字符串被定义为默认值吗?

  
    
      

User._meta.get_field( “用户名”)。缺省       django.db.models.fields.NOT_PROVIDED

    
  

什么?我期待一个空字符串......

那么如果没有为特定字段提供值(例如assertEquals),您应该如何检查(例如,在assertRaise / username / ...的测试中使用) )实例化模型时(例如User) 会引起异常吗?

修改

我想知道有人会怎么写单元测试来检查这个。 (如果assertNotRaises存在,则会更容易。)

1 个答案:

答案 0 :(得分:0)

您可以使用full_clean方法。

>>> User().full_clean()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/falsetru/.virtualenvs/django16/local/lib/python2.7/site-packages/django/db/models/base.py", line 950, in full_clean
    raise ValidationError(errors)
ValidationError: {'username': [u'This field cannot be blank.'], 'password': [u'This field cannot be blank.']}