在Django单元测试中导入SeekingConstants报错:找不到models模块
Django单元测试导入自定义类报错:ModuleNotFoundError: No module named 'models'
问题场景
在Django单元测试中尝试导入自定义的SeekingConstants类时,触发以下错误:
ModuleNotFoundError: No module named 'models'
models.py代码片段
class SeekingConstants: MEN = 'Men' WOMEN = 'Women' BOTH_MEN_AND_WOMEN = 'Both men and women'
test_user_api.py代码片段
from models import SeekingConstants ... def test_update_user_seeking_choice(self): """Part 1: Update the seeking choice from nothing""" payload = { 'email': 'test@example.com', 'seeking_choice': SeekingConstants.WOMEN } res = self.client.patch(ME_URL, payload) self.user.refresh_from_db() self.assertEqual(self.user.email, payload['email']) self.assertTrue(self.user.seeking_choice, payload['seeking_choice']) self.assertEqual(res.status_code, status.HTTP_200_OK) """Part 2: Update an existing seeking choice""" new_payload = { 'email': 'test@example.com', 'seeking_choice': SeekingConstants.BOTH_MEN_AND_WOMEN } res = self.client.patch(ME_URL, new_payload) self.user.refresh_from_db() self.assertEqual(self.user.email, payload['email']) self.assertTrue(self.user.seeking_choice, payload['seeking_choice']) self.assertEqual(res.status_code, status.HTTP_200_OK)
项目目录结构:
你的项目/ └── users/ ├── models.py └── tests/ └── test_user_api.py
错误原因
当前导入语句from models import SeekingConstants试图从Python顶级模块路径查找models模块,但你的models.py属于users应用,测试文件位于users/tests目录下,直接写models会导致Python无法定位正确的模块。
正确导入方式
方法1:绝对导入(推荐,符合Django规范)
用应用名作为前缀,明确指定模块路径:
from users.models import SeekingConstants
方法2:相对导入
利用相对路径指向同一应用内的models模块:
from ..models import SeekingConstants
额外提示
测试代码存在一处逻辑错误:self.assertTrue(self.user.seeking_choice, payload['seeking_choice'])用法有误,assertTrue用于判断表达式是否为真,这里应该用self.assertEqual验证值相等:
self.assertEqual(self.user.seeking_choice, payload['seeking_choice'])
内容的提问来源于stack exchange,提问作者code writer 3000
相关产品推荐
相关产品推荐

