我想要做的是重定向到删除项目时用户所在的同一页面。使用" django.views.generic.edit"删除后(DeleteView)我可以将所有需要的信息收集到模型中,并获得我需要的特定类别。问题是如何创建此请求URL?
这样我就到了http://127.0.0.1:8000/productlist/floor/
<a class="dropdown-item" href="{% url 'productlist' 'floor' %}" >
views.py
class LampDelete(DeleteView):
model = Lamp
#success_url = reverse_lazy('index')
def get_success_url(self):
categ = self.object.category
lamps = Lamp.objects.filter(category=categ)
return redirect('productlist', {'lamps': lamps})
urls.py
urlpatterns =[
url(r'^$', views.index, name='index'),
url(r'^productlist/([a-z0-9]+)/$', views.productlist, name='productlist'),
url(r'^accounts/', include('allauth.urls')),
url(r'productlist/(?P<pk>[0-9]+)/delete/$', views.LampDelete.as_view(), name='lamp-delete'),]
那么我应该使用什么方法以及如何使用选定的类别模型重定向到我的模板。如果有人能提供一个例子,那将非常感激。
答案 0 :(得分:2)
实际上你仍然在.get_success_url()
,
来自source code:
class DeletionMixin(object):
def delete(self, request, *args, **kwargs):
"""
Calls the delete() method on the fetched object and then
redirects to the success URL.
"""
self.object = self.get_object()
success_url = self.get_success_url()
self.object.delete()
return HttpResponseRedirect(success_url)
如您所见,首先计算success_url
然后删除对象。
你做错了什么:
str
对象提供,而是调用redirect
来触发重定向并跳过整个删除过程。redirect
使用提供queryset
而不是str
的网址参数进行查看,因为它一直在等待([a-z0-9]+)
我相信在productlist
视图中,您期望某种类别的名称,您的产品已经过滤了
所以你能做什么:
str
.get_success_url()
对象
醇>
E.g。
class LampDelete(DeleteView):
model = Lamp
def get_success_url(self):
category = self.object.category
return reverse('productlist', args=[category])