How to Pass Id Here (error put() missing 1 required positional argument: 'request') 在表单模板 Django 中
How to Pass Id Here (error put() missing 1 required positional argument: 'request') In form template Django
urls.py
from django.urls import path
from . import views
app_name = "poll"
urlpatterns = [
path('', views.index, name="index"), # listing the polls
path('<int:id>/edit/', views.put, name='poll_edit'), ]
views.py
def put(self, request, id):
# print("catching error ") error before this line
question = get_object_or_404(Question, id=id)
poll_form = PollForm(request.POST, instance=question)
choice_forms = [ChoiceForm(request.POST, prefix=str(
choice.id), instance=choice) for choice in question.choice_set.all()]
if poll_form.is_valid() and all([cf.is_valid() for cf in choice_form]):
new_poll = poll_form.save(commit=False)
new_poll.created_by = request.user
new_poll.save()
for cf in choice_form:
new_choice = cf.save(commit=False)
new_choice.question = new_poll
new_choice.save()
return redirect('poll:index')
context = {'poll_form': poll_form, 'choice_forms': choice_forms}
return render(request, 'polls/edit_poll.html', context)
edit_poll.html
{% extends 'base.html' %}
{% block content %}
<form method="PUT" >
{% csrf_token %}
<table class="table table-bordered table-light">
{{poll_form.as_table}}
{% for form in choice_forms %}
{{form.as_table}}
{% endfor %}
</table>
<button type="submit" class="btn btn-warning float-right">Update</button>
</form>
{% endblock content %}
这是错误
line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
Exception Type: TypeError at /polls/9/edit/
Exception Value: put() missing 1 required positional argument: 'request'
我知道我没有在 html 中传递参数,但我不知道如何在 html 中传递 id 参数,请帮助我
任何一行类似默认的代码(Django 传递的上下文)
您正在定义一个简单的函数,而不是 class 中的方法,因此您应该删除 self
参数:
# <i>no</i> self ↓
def put(request, id):
# …
请注意,您使用 choice_forms
所做的基本上就是 FormSet
does [Django-doc]。
urls.py
from django.urls import path
from . import views
app_name = "poll"
urlpatterns = [
path('', views.index, name="index"), # listing the polls
path('<int:id>/edit/', views.put, name='poll_edit'), ]
views.py
def put(self, request, id):
# print("catching error ") error before this line
question = get_object_or_404(Question, id=id)
poll_form = PollForm(request.POST, instance=question)
choice_forms = [ChoiceForm(request.POST, prefix=str(
choice.id), instance=choice) for choice in question.choice_set.all()]
if poll_form.is_valid() and all([cf.is_valid() for cf in choice_form]):
new_poll = poll_form.save(commit=False)
new_poll.created_by = request.user
new_poll.save()
for cf in choice_form:
new_choice = cf.save(commit=False)
new_choice.question = new_poll
new_choice.save()
return redirect('poll:index')
context = {'poll_form': poll_form, 'choice_forms': choice_forms}
return render(request, 'polls/edit_poll.html', context)
edit_poll.html
{% extends 'base.html' %}
{% block content %}
<form method="PUT" >
{% csrf_token %}
<table class="table table-bordered table-light">
{{poll_form.as_table}}
{% for form in choice_forms %}
{{form.as_table}}
{% endfor %}
</table>
<button type="submit" class="btn btn-warning float-right">Update</button>
</form>
{% endblock content %}
这是错误
line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
Exception Type: TypeError at /polls/9/edit/
Exception Value: put() missing 1 required positional argument: 'request'
我知道我没有在 html 中传递参数,但我不知道如何在 html 中传递 id 参数,请帮助我 任何一行类似默认的代码(Django 传递的上下文)
您正在定义一个简单的函数,而不是 class 中的方法,因此您应该删除 self
参数:
# <i>no</i> self ↓
def put(request, id):
# …
请注意,您使用 choice_forms
所做的基本上就是 FormSet
does [Django-doc]。