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']
。
问题出在 DeleteView
的 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']) # <--------
我正在尝试创建一个页面,我可以在其中使用基于 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']
。
问题出在 DeleteView
的 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']) # <--------