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

Django - get_object_or_404() takes at least 1 argument (0 given)

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

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"),

错误可能在:视图第 3 行 | 模板第 2 行

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

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

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

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

问题出在 DeleteViewpost 方法上,你传递的 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']) # <--------