2015-06-21 96 views
2

我想创建一个页面,我可以使用基于类的视图删除文章。有一个问题,我得到一个错误,说: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

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

+0

其中'article_id'在表单中定义? – Pynchia

+0

@Pynchia我编辑了我的文章,我用'article = get_object_or_404(Article,id = id)'取代了它,并且它给了我另一个错误 – Lindow

+0

在'post'方法'article = get_object_or_404(Article,id = id)'你是传递Python内置'id'不是来自kwargs。 –

回答

2

问题是与您的​​post方法,你逝去的id这是一个Python built-in function而你需要得到idkwargs

问题:

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']) # <-------- 
3

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

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

我已经尝试过,但'article = get_object_or_404(Article,id = id)'给我一个错误,说** id()只需要一个参数(给出0)** – Lindow

+0

您仍然需要传递值的id,就像你最初一样。 –

+0

我应该使用内置id的kwargs ['id'],谢谢你的帮助。 – Lindow

1

post(),你没有通过id kwarg,但你传递内置功能id。您需要改为使用kwargs['id'],就像您在get()中那样。

相关问题