[英]Getting TypeError: Form.__init__() missing 1 required positional argument: ‘request’ even though I have passed request in both GET and POST methods
我有一个表单,我正在使用HttpRequest
object 在其__init__()
方法中从视图中传递一些数据来初始化它的字段,以显示在前端。 即使,我在GET
和POST
方法中都通过了HttpRequest
object 命名request
,但在POST
请求中仍然出现以下错误:
TypeError at /accounts/invite-user/cancel/
InviteUserCancelForm.__init__() missing 1 required positional argument: 'request'
错误的完整细节是:
Traceback Switch to copy-and-paste view
D:\Projects\meistery\venvs\inviteandresetpass\lib\site-packages\django\core\handlers\exception.py, line 55, in inner
response = get_response(request) …
Local vars
D:\Projects\meistery\venvs\inviteandresetpass\lib\site-packages\django\core\handlers\base.py, line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs) …
Local vars
D:\Projects\meistery\venvs\inviteandresetpass\lib\site-packages\django\views\generic\base.py, line 84, in view
return self.dispatch(request, *args, **kwargs) …
Local vars
D:\Projects\meistery\venvs\inviteandresetpass\lib\site-packages\django\contrib\auth\mixins.py, line 73, in dispatch
return super().dispatch(request, *args, **kwargs) …
Local vars
D:\Projects\meistery\venvs\inviteandresetpass\lib\site-packages\django\contrib\auth\mixins.py, line 109, in dispatch
return super().dispatch(request, *args, **kwargs) …
Local vars
D:\Projects\meistery\venvs\inviteandresetpass\lib\site-packages\django\views\generic\base.py, line 119, in dispatch
return handler(request, *args, **kwargs) …
Local vars
D:\Projects\meistery\venvs\inviteandresetpass\lib\site-packages\django\views\generic\edit.py, line 151, in post
form = self.get_form() …
Local vars
D:\Projects\meistery\venvs\inviteandresetpass\lib\site-packages\django\views\generic\edit.py, line 39, in get_form
return form_class(**self.get_form_kwargs()) …
我的forms.py
是:
class InviteUserCancelForm(forms.Form):
invitations = forms.ChoiceField(
widget=forms.RadioSelect,
choices=(('test_invite','test_invite'),)
)
def __init__(self, request: HttpRequest, *args, **kwargs):
super (InviteUserCancelForm, self).__init__(*args, **kwargs)
if "invitations" in args:
self.fields['invitations'] = forms.ChoiceField(
label="Your Invitations",
widget=forms.RadioSelect,
choices=request["invitations"]
)
else:
self.fields['invitations'] = forms.ChoiceField(
label="Your Invitations",
widget=forms.RadioSelect,
choices=request.session["invitations"]
)
我的views.py
是:
class InviteUserCancel(LoginRequiredMixin, PermissionRequiredMixin, FormView):
permission_required = ("accounts.workspace.can_view", "accounts.workspace.can_change")
permission_denied_message = "ACCESS DENIED: Only Administrators or Workspace \
Administrators can view this page."
template_name = "accounts/invite-user-cancel.html"
extra_context = {"title": "Invitation Sent"}
form_class = InviteUserCancelForm
success_url = "/accounts/invite-user/cancel/done/"
def get(self, request):
invites = Invitation.objects.filter(created_by=request.user)
if request.user.is_superuser:
invites = Invitation.objects.all()
invitations = []
for invite in invites:
invitations.append(tuple((invite.pk, invite.__str__()),))
self.object = tuple(invitations)
request.session["invitations"] = self.object
form = InviteUserCancelForm(request)
return self.render_to_response(self.get_context_data(form=form))
def form_invalid(self, form, request):
messages.error(
request,
"ERROR: You did not fill all the fields of the form \
or you did not fill the form properly."
)
return self.render_to_response(self.get_context_data(form=form))
def form_valid(self, form, request):
try:
invitation = self.model.objects.get(pk=int(form["invitations"]))
invitation.cancel()
return HttpResponseRedirect(self.get_success_url())
except Invitation.DoesNotExist:
form = InviteUserCancelForm(request, request.POST)
return self.form_invalid(form, request)
我在做什么错?
我删除了覆盖的valid_form()
方法,而是覆盖了post()
方法,它现在工作正常。
下面是我post()
方法:
def post(self, request):
form = InviteUserCancelForm(request, request.POST)
if not form.is_valid():
return self.form_invalid(form, request)
try:
invitation = Invitation.objects.get(pk=int(form.cleaned_data.get("invitations")))
invitation.cancel()
return self.form_valid(form)
except Invitation.DoesNotExist:
return self.form_invalid(form, request)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.