Django - get_object_or_404()至少需要1个参数(0给出)
问题描述:
我想创建一个页面,我可以使用基于类的视图删除文章。有一个问题,我得到一个错误,说:Django - get_object_or_404()至少需要1个参数(0给出)
id() takes exactly one argument (0 given)
这里是代码:
views.py
class DeleteView(View):
def post(self, request, *args, **kwargs):
article = get_object_or_404(Article, id=id)
article.delete()
return HttpResponseRedirect('/')
def get(self, request, *args, **kwargs):
article = Article.objects.get(id=kwargs['id'])
context = {"article": article}
return render_to_response("delete.html", context, context_instance=RequestContext(request))
template.html
<div class="col-xs-12 col-sm-8 col-md-8 col-lg-8">
<form action="{% url 'DeleteView' article.id %}" method="POST">
{% csrf_token %}
<input type="hidden" value="{{ article.views.id }}">
<input type="submit" value="Delete">
</form>
</div>
urls.py
url(r'^delete/(?P<id>\d+)/$', DeleteView.as_view(), name="DeleteView"),
的故障是problably上:意见:线3 | 模板:线2
我失去了一些东西,但我无法弄清楚。我怎样才能解决这个问题?
答
问题是与您的post
方法,你逝去的id
这是一个Python built-in function而你需要得到id
从kwargs
:
问题:
class DeleteView(View):
def post(self, request, *args, **kwargs):
article = get_object_or_404(Article, id=id) # <--------
解决方案:
class DeleteView(View):
def post(self, request, *args, **kwargs):
article = get_object_or_404(Article, id=kwargs['id']) # <--------
答
在post()
,你没有通过id
kwarg,但你传递内置功能id
。您需要改为使用kwargs['id']
,就像您在get()
中那样。
其中'article_id'在表单中定义? – Pynchia
@Pynchia我编辑了我的文章,我用'article = get_object_or_404(Article,id = id)'取代了它,并且它给了我另一个错误 – Lindow
在'post'方法'article = get_object_or_404(Article,id = id)'你是传递Python内置'id'不是来自kwargs。 –