Django AttributeError:“InterestsForm”对象没有属性“_errors”
Posted
技术标签:
【中文标题】Django AttributeError:“InterestsForm”对象没有属性“_errors”【英文标题】:Django AttributeError: 'InterestsForm' object has no attribute '_errors' 【发布时间】:2016-12-19 18:19:10 【问题描述】:我正在尝试使用 Django 表单来允许 Django 用户输入他们最喜欢的三个兴趣。该错误发生在模板渲染期间,它显示form.as_ul
。
代码如下:
reg_interests.html
% block content %
<br><br>
<h1>Choose the 3 things that interest you most!</h1>
<form method="post" action="/reg_interests/">
% csrf_token %
form.as_ul
<br>
<p class="submit"><input class="btn btn-default" type="submit" name="commit" value="Continue"></p>
</form>
% endblock %
views.py
def reg_interests_view(request):
if request.POST:
form = InterestsForm(request.POST, request=request)
if form.is_valid():
form.save(request)
return redirect('/reg_video/')
args =
args['form'] = InterestsForm(request=request)
return render(request, 'login/reg_interests.html', args)
forms.py
class InterestsForm(RequestModelForm):
interest1 = forms.ChoiceField(choices=[(1, "Option 1"), (2, "Option 2")])
interest2 = forms.ChoiceField(choices=[(1, "Option 1"), (2, "Option 2")])
interest3 = forms.ChoiceField(choices=[(1, "Option 1"), (2, "Option 2")])
class Meta:
model = Interest
fields = ('interest1', 'interest2', 'interest3')
def __init__(self, request):
self.user = request.user
def save(self, commit=True):
interest = super(InterestsForm, self).save(commit=False)
interest.user = self.user
interest.interest1 = self.cleaned_data['interest1']
interest.interest2 = self.cleaned_data['interest2']
interest.interest3 = self.cleaned_data['interest3']
if commit:
interest.save()
return interest
我认为表单有问题,但我不知道如何或为什么需要定义_errors
。 Django 本身不应该处理这个问题吗?如果不是,我如何定义_errors
?
【问题讨论】:
【参考方案1】:此代码根本无法工作,因为您覆盖了表单的 __init__
方法,因此 a) 您只接受 request
参数 - 而不是表单所期望的任何其他内容,例如data
或 initial
- 并且 b) 你永远不会调用超类的 init 方法来初始化表单代码的其余部分所期望的东西。您需要保留签名并调用super。
def __init__(self, *args, **kwargs):
request = kwargs.pop('request')
self.user = request.user
super(InterestsForm, self).__init__(*args, **kwargs)
【讨论】:
谢谢!我永远也想不通。以上是关于Django AttributeError:“InterestsForm”对象没有属性“_errors”的主要内容,如果未能解决你的问题,请参考以下文章
Django 3:AttributeError:'AdminSite'对象没有属性'Register' [关闭]
Django 2.2 + AttributeError:'str'对象没有属性'decode'
AttributeError:模块'django.db.models'没有属性'DataField'[关闭]
AttributeError:模块 'django.contrib.postgres.fields' 没有属性 'JSONField'
AttributeError:'str'对象没有属性'regex'django 1.9
AttributeError: 'ManyToManyDescriptor' 对象没有属性 'all' - django