Django - get_object_or_404()至少需要1个参数(给定0)

时间:2015-06-21 19:43:12

标签: python django django-class-based-views

我正在尝试创建一个页面,我可以使用基于类的视图删除文章。有一个问题,我收到的错误是:

.css

这是代码:

views.py

base_menu.html

template.html

id() takes exactly one argument (0 given)

urls.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))

故障可能是:视图第3行 | 模板第2行

我遗失了一些东西,但我无法弄清楚。我怎样才能解决这个问题?

3 个答案:

答案 0 :(得分:3)

您需要传递模型类,以便函数知道它试图获取的对象类型。

article = get_object_or_404(Article, id=request.POST.get('article_id', ''))

答案 1 :(得分:2)

问题在于post DeleteView id方法,您传递id这是一个python built-in function,而您需要获取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']) # <--------

解决方案:

.draw

答案 2 :(得分:1)

post()中,您没有传递id kwarg,但您正在传递内置函数id。您需要使用kwargs['id'],而不是get()