无法将关键字 'is_active' 解析为字段?
Cannot resolve keyword 'is_active' into field?
我的项目中包含了 Django allauth
包。我正在尝试使用自定义表单创建重置密码页面的自定义视图。这是我拥有的:
urls.py
urlpatterns = [
url(r'^password/reset/$', views.ResetPasswordView.as_view(), name='password-reset'),
]
views.py
class ResetPasswordView(PasswordResetView):
template_name = 'account/password-reset.html'
form_class = ResetPasswordForm
forms.py
class ResetPasswordForm(PasswordResetForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['email'].label = ""
self.fields['email'].widget = forms.EmailInput(attrs={"placeholder": "Email Address"})
但是,由于某些原因,当我输入电子邮件地址重置密码时,出现以下错误:
Traceback:
File
"C:\python3.6.3\lib\site-packages\django\core\handlers\exception.py"
in inner
41. response = get_response(request)
File "C:\python3.6.3\lib\site-packages\django\core\handlers\base.py"
in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "C:\python3.6.3\lib\site-packages\django\core\handlers\base.py"
in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\python3.6.3\lib\site-packages\django\views\generic\base.py"
in view
68. return self.dispatch(request, *args, **kwargs)
File "C:\python3.6.3\lib\site-packages\django\views\generic\base.py"
in dispatch
88. return handler(request, *args, **kwargs)
File "C:\python3.6.3\lib\site-packages\allauth\account\views.py" in
post
102. response = self.form_valid(form)
File "C:\python3.6.3\lib\site-packages\allauth\account\views.py" in
form_valid
639. form.save(self.request)
File "C:\python3.6.3\lib\site-packages\django\contrib\auth\forms.py"
in save
269. for user in self.get_users(email):
File "C:\python3.6.3\lib\site-packages\django\contrib\auth\forms.py"
in get_users
254. 'is_active': True,
File "C:\python3.6.3\lib\site-packages\django\db\models\manager.py" in
manager_method
85. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\python3.6.3\lib\site-packages\django\db\models\query.py" in
filter
784. return self._filter_or_exclude(False, *args, **kwargs)
File "C:\python3.6.3\lib\site-packages\django\db\models\query.py" in
_filter_or_exclude
802. clone.query.add_q(Q(*args, **kwargs))
File "C:\python3.6.3\lib\site-packages\django\db\models\sql\query.py"
in add_q
1250. clause, _ = self._add_q(q_object, self.used_aliases)
File "C:\python3.6.3\lib\site-packages\django\db\models\sql\query.py"
in _add_q
1276. allow_joins=allow_joins, split_subq=split_subq,
File "C:\python3.6.3\lib\site-packages\django\db\models\sql\query.py"
in build_filter
1154. lookups, parts, reffed_expression = self.solve_lookup_type(arg)
File "C:\python3.6.3\lib\site-packages\django\db\models\sql\query.py"
in solve_lookup_type
1034. _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
File "C:\python3.6.3\lib\site-packages\django\db\models\sql\query.py"
in names_to_path
1352. "Choices are: %s" % (name, ", ".join(available)))
Exception Type: FieldError at /password/reset/ Exception Value: Cannot
resolve keyword 'is_active' into field. Choices are: Profile,
Profile_id, active, admin, date_joined, email, emailaddress,
favorites_count, follower_count, followers, following_count, id,
last_login, logentry, password, points_count, questions_count,
socialaccount, staff, targets, username
当我从视图中删除 form_class 并使用默认表单时,它可以正常工作。为什么我添加自定义表单时它不起作用?
我终于明白了。它产生这种类型错误的原因是因为我从 Auth 继承而不是 Allauth for forms。
forms.py
class ResetPasswordForm(PasswordResetForm):
PasswordResetForm
来自 Auth 而不是 Allauth。 Allauth的class名字叫:ResetPasswordForm
知道后,我的结果是这样的:
class PasswordResetForm(ResetPasswordForm):
它现在可以正常工作并且不会给我那个错误。
我的项目中包含了 Django allauth
包。我正在尝试使用自定义表单创建重置密码页面的自定义视图。这是我拥有的:
urls.py
urlpatterns = [
url(r'^password/reset/$', views.ResetPasswordView.as_view(), name='password-reset'),
]
views.py
class ResetPasswordView(PasswordResetView):
template_name = 'account/password-reset.html'
form_class = ResetPasswordForm
forms.py
class ResetPasswordForm(PasswordResetForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['email'].label = ""
self.fields['email'].widget = forms.EmailInput(attrs={"placeholder": "Email Address"})
但是,由于某些原因,当我输入电子邮件地址重置密码时,出现以下错误:
Traceback:
File "C:\python3.6.3\lib\site-packages\django\core\handlers\exception.py" in inner 41. response = get_response(request)
File "C:\python3.6.3\lib\site-packages\django\core\handlers\base.py" in _get_response 187. response = self.process_exception_by_middleware(e, request)
File "C:\python3.6.3\lib\site-packages\django\core\handlers\base.py" in _get_response 185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\python3.6.3\lib\site-packages\django\views\generic\base.py" in view 68. return self.dispatch(request, *args, **kwargs)
File "C:\python3.6.3\lib\site-packages\django\views\generic\base.py" in dispatch 88. return handler(request, *args, **kwargs)
File "C:\python3.6.3\lib\site-packages\allauth\account\views.py" in post 102. response = self.form_valid(form)
File "C:\python3.6.3\lib\site-packages\allauth\account\views.py" in form_valid 639. form.save(self.request)
File "C:\python3.6.3\lib\site-packages\django\contrib\auth\forms.py" in save 269. for user in self.get_users(email):
File "C:\python3.6.3\lib\site-packages\django\contrib\auth\forms.py" in get_users 254. 'is_active': True,
File "C:\python3.6.3\lib\site-packages\django\db\models\manager.py" in manager_method 85. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\python3.6.3\lib\site-packages\django\db\models\query.py" in filter 784. return self._filter_or_exclude(False, *args, **kwargs)
File "C:\python3.6.3\lib\site-packages\django\db\models\query.py" in _filter_or_exclude 802. clone.query.add_q(Q(*args, **kwargs))
File "C:\python3.6.3\lib\site-packages\django\db\models\sql\query.py" in add_q 1250. clause, _ = self._add_q(q_object, self.used_aliases)
File "C:\python3.6.3\lib\site-packages\django\db\models\sql\query.py" in _add_q 1276. allow_joins=allow_joins, split_subq=split_subq,
File "C:\python3.6.3\lib\site-packages\django\db\models\sql\query.py" in build_filter 1154. lookups, parts, reffed_expression = self.solve_lookup_type(arg)
File "C:\python3.6.3\lib\site-packages\django\db\models\sql\query.py" in solve_lookup_type 1034. _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
File "C:\python3.6.3\lib\site-packages\django\db\models\sql\query.py" in names_to_path 1352. "Choices are: %s" % (name, ", ".join(available)))
Exception Type: FieldError at /password/reset/ Exception Value: Cannot resolve keyword 'is_active' into field. Choices are: Profile, Profile_id, active, admin, date_joined, email, emailaddress, favorites_count, follower_count, followers, following_count, id, last_login, logentry, password, points_count, questions_count, socialaccount, staff, targets, username
当我从视图中删除 form_class 并使用默认表单时,它可以正常工作。为什么我添加自定义表单时它不起作用?
我终于明白了。它产生这种类型错误的原因是因为我从 Auth 继承而不是 Allauth for forms。
forms.py
class ResetPasswordForm(PasswordResetForm):
PasswordResetForm
来自 Auth 而不是 Allauth。 Allauth的class名字叫:ResetPasswordForm
知道后,我的结果是这样的:
class PasswordResetForm(ResetPasswordForm):
它现在可以正常工作并且不会给我那个错误。