测试Django的forms.py时出现AssertionError问题求助
问题解决:Course不在表单可用选项范围内
核心原因
你的Lead模型中course字段关联的是LiveCourse模型,但测试代码里创建的是Course模型的实例,两者不匹配,导致表单验证时找不到对应的选项,触发断言错误。
修复步骤
修正测试中的模型实例
将valid_coursefixture里创建的Course实例改为LiveCourse实例,确保和模型关联的一致:@pytest.fixture def valid_course(db): # 替换成LiveCourse,匹配Lead模型的关联 return LiveCourse.objects.create(name='Design')检查表单字段配置(可选)
如果你的LeadForm自定义了course字段的queryset,要确保它是LiveCourse.objects.all()(或包含你创建的测试实例的查询集),比如:class LeadForm(forms.ModelForm): class Meta: model = Lead fields = ['course', ...] # 确保字段包含course # 如果自定义了queryset,要对应LiveCourse course = forms.ModelChoiceField(queryset=LiveCourse.objects.all())验证测试数据
修正后的valid_lead_datafixture会自动使用LiveCourse的ID,表单验证就能正确识别这个选项了。
额外注意点
- 确认你的项目中确实存在
LiveCourse模型,且和Course是不同的模型(如果是继承关系,也要确保创建的是正确的子类实例)。 - 运行测试前,可以先打印表单的
course字段选项,确认包含你创建的测试实例ID,方便排查问题。
内容的提问来源于stack exchange,提问作者Keerthana Baskar
相关产品推荐
相关产品推荐

