类型错误:';非类型';对象在测试django约束时不可调用

类型错误:';非类型';对象在测试django约束时不可调用,django,Django,我想在django中测试这个约束,django包含一个条件检查出生日期字段,该字段必须小于“2011-00-00” 但是当我运行python3 manage.py测试时出现以下错误: Traceback (most recent call last): File "C:\Users\dd\Desktop\Dev\django\lemoon\lemoon\account\tests.py", line 45, in test_create_user_under_10

我想在django中测试这个约束,django包含一个条件检查出生日期字段,该字段必须小于“2011-00-00” 但是当我运行
python3 manage.py测试时
出现以下错误:

Traceback (most recent call last):
  File "C:\Users\dd\Desktop\Dev\django\lemoon\lemoon\account\tests.py", line 45, in test_create_user_under_10
    self.assertRaises(IntegrityError,user.save())
  File "c:\users\dd\appdata\local\programs\python\python39\lib\unittest\case.py", line 733, in assertRaises
    return context.handle('assertRaises', args, kwargs)
  File "c:\users\dd\appdata\local\programs\python\python39\lib\unittest\case.py", line 201, in handle
    callable_obj(*args, **kwargs)
TypeError: 'NoneType' object is not callable
models.py:

来自django.db导入模型的

从django.contrib.auth.models导入AbstractBaseUser
从.managers导入UserManager
导入日期时间
从django.db.models导入Q
类用户(AbstractBaseUser):
email=models.EmailField(最大长度=120,唯一性=True)
first_name=models.CharField(最大长度=100)
last_name=models.CharField(最大长度=100)
出生日期=models.DateField()
is_active=models.BooleanField(默认值=True)
is_admin=models.BooleanField(默认值=False)
objects=UserManager()
用户名\字段='电子邮件'
必填字段=[“出生日期”、“名字”、“姓氏”]
定义(自我):
返回self.email
def具有_perm(自我、perm、obj=无):
返回真值
def具有模块(自身、应用程序标签):
返回真值
@财产
def是_员工(自我):
返回self.is_admin
类元:
索引=[
models.Index(name=“email\u user\u idx”,字段=['email'])
]
约束=[
models.CheckConstraint(name=“check\u birth\u date”,check=models.Q(birth\u date\uuu lte=“2011-00-00”))
]             
tests.py:

类测试(TestCase):
def test_create_user_在_10(自身)下:
User=get\u User\u model()
user=user.objects.test\u年龄以下(电子邮件=”majid@email.com“,first_name=“small_majid”,
last_name=“majidi”,出生日期=“2011-05-22”,密码=“mybestpassword”)
self.assertRaises(IntegrityError,user.save())

如果我以错误的形式编写测试,请纠正我。

如果您错误地使用了
assertRaises
方法,您应该使用上下文管理器来实现这一点:

类测试(TestCase):
def test_create_user_在_10(自身)下:
User=get\u User\u model()
user=user.objects.test\u年龄以下(email=)majid@email.com'第一个名字是'small'majid',
姓氏class='majidi',出生日期class='2011-05-22',密码class='mybestpassword')
使用self.assertRaises(IntegrityError):
user.save()

但是,在这种情况下,它似乎失败了,因为
user.save()
返回
None
,因此不会引发错误。并非所有数据库都执行约束检查,而且
2011-00-00
看起来不是有效日期。

非常感谢!我必须将
2011-00-00
更改为
2011-01-01
,以获得正确的格式
class Test(TestCase):

    def test_create_user_under_10(self):
        User = get_user_model()
        user = User.objects.test_under_age(email='majid@email.com', first_name='small_majid',
        last_name='majidi',birth_date='2011-05-22',password='mybestpassword')
        with self.assertRaises(IntegrityError):
            user.save()