Django问题:过滤表单字段查询集时出现CreationForm无get属性错误
解决CreationForm 'has no attribute 'get''错误
错误根源
你的CreationForm类重写__init__方法时,调用父类构造函数错误传递了self参数,导致表单实例初始化逻辑异常,触发了'CreationForm' object has no attribute 'get'错误。
修复表单代码
将表单的__init__方法中父类构造调用的多余self参数移除:
class CreationForm(forms.ModelForm): def __init__(self, *args, **kwargs): # 移除多余的self参数,正确调用父类构造 super(CreationForm, self).__init__(*args, **kwargs) self.fields["contest"].queryset = Contest.objects.filter(active=True) class Meta: ... # 你的模型及字段定义
视图代码优化(可选)
原视图中直接给form.user赋值的方式无法正确关联到模型实例,建议改用commit=False的方式处理用户关联:
def Creation(request): user = request.user if request.user.is_authenticated else None if request.method == "POST": form = CreationForm(request.POST) if form.is_valid(): # 先创建未提交的模型实例 sheet = form.save(commit=False) if user: sheet.user = user # 保存最终实例 sheet.save() return redirect("sheet_detail", pk=sheet.id) initial = {'user': user} if user else {} form = CreationForm(initial=initial) return render(request, "jde/creation_form.html", context={"form": form})
内容的提问来源于stack exchange,提问作者Noah7
相关产品推荐
相关产品推荐

