Django视图测试故障:新建用户无法登录、CBV创建视图测试不生成对象
问题1:自建test超级用户登录失败
排查&解决方案
- 确认导入的用户模型是否正确:如果你项目自定义了用户模型,不要硬导入
from django.contrib.auth.models import User,统一用from django.contrib.auth import get_user_model; User = get_user_model()来获取用户模型,避免导入错模型导致创建的用户不在你认证用的用户表中。 - 检查认证后端配置:查看
settings.py中的AUTHENTICATION_BACKENDS参数,如果不是默认的ModelBackend,比如配置了邮箱作为登录账号,那么client.login的入参要对应修改,比如改成self.client.login(email='test@test.fr', password='test'),不要传username参数。 - 校验密码是否生效:在
setUp中加一行print(self.user.check_password('test')),如果返回False说明密码没有正确设置,大概率是自定义用户模型的密码加密逻辑有问题。
问题2:登录成功后提交POST请求未创建Patient对象
你请求返回状态码200说明表单校验失败,CreateView校验不通过时会直接返回带错误信息的表单页,不会走创建逻辑,按以下步骤排查:
- 修正POST请求的外键传参:
Client.post的表单参数不能直接传模型实例,外键字段要传主键值,把你请求里的'pat_sit': patient_site改成'pat_sit': patient_site.pk。 - 打印表单错误定位问题:在发送POST请求后加一行打印代码,就能直接看到表单校验失败的具体原因:
常见原因包括:print(response.context['form'].errors)PatientForm的fields配置没有包含你传的参数、还有其他必填字段未传、字段规则校验不通过(比如pat字段格式不符合要求、pat_sit权限校验不通过等)。 - 校验用户权限:确认你登录的用户有创建
Patient对象的权限,如果视图除了login_required还加了权限校验装饰器,没有对应权限也会跳转或拒绝创建。
内容的提问来源于stack exchange,提问作者Mereva
相关产品推荐
相关产品推荐

