Django项目测试报错:Inspection()收到意外关键字参数partNum
解决
Inspection() got an unexpected keyword argument partNum报错 嘿,这个问题我之前踩过一模一样的坑,咱们快速定位解决:
核心原因
你在测试用例的setUp方法里,尝试用partNum作为关键字参数创建Inspection对象,但你的Inspection模型类根本没定义这个字段,Django的ORM自然会报错说收到了意外的参数。你提供的代码里没贴models.py,这大概率就是问题的根源。
修复步骤
1. 完善Inspection模型的字段定义
打开你的models.py,确保Inspection类包含所有你用到的字段:
from django.db import models class Inspection(models.Model): workOrderNum = models.CharField(max_length=20) partNum = models.CharField(max_length=20) # 就是这个字段你漏了! customerName = models.CharField(max_length=100) qtyInspected = models.IntegerField() qtyRejected = models.IntegerField() def __str__(self): return self.workOrderNum
2. 执行数据库迁移
修改模型后必须同步数据库,不然新字段不会生效:
python manage.py makemigrations python manage.py migrate
3. (可选)优化测试用例的pk引用
另外提醒一下:如果之前有遗留的测试数据,你创建的第一个Inspection对象pk不一定是1,稳妥的写法可以改成保存对象后直接用它的pk:
def setUp(self): self.inspection = Inspection.objects.create( workOrderNum='312456', partNum='SD33345100-AQ1', customerName='TERRA Inc.', qtyInspected=10, qtyRejected=2 ) def test_inspection_defects_view_success_status_code(self): url = reverse('inspection_defects', kwargs={'pk': self.inspection.pk}) response = self.client.get(url) self.assertEquals(response.status_code, 200)
排查小技巧
如果不确定模型有哪些字段,可通过Django Shell快速验证:
python manage.py shell
然后执行:
from finalreports.models import Inspection print([field.name for field in Inspection._meta.get_fields()])
这样就能列出Inspection模型的所有字段,确认是否包含partNum。
内容的提问来源于stack exchange,提问作者Alfred Tsang
相关产品推荐
相关产品推荐

