Django重定向到模板传递模型

时间:2017-05-06 19:54:52

标签: python django

我想要做的是重定向到删除项目时用户所在的同一页面。使用" 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'),]

那么我应该使用什么方法以及如何使用选定的类别模型重定向到我的模板。如果有人能提供一个例子,那将非常感激。

1 个答案:

答案 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然后删除对象。

你做错了什么:

  1. 而不是将{url}作为str对象提供,而是调用redirect来触发重定向并跳过整个删除过程。
  2. redirect使用提供queryset而不是str的网址参数进行查看,因为它一直在等待([a-z0-9]+)
  3. 我相信在productlist视图中,您期望某种类别的名称,您的产品已经过滤了

    所以你能做什么

    1. str
    2. 中返回有效的.get_success_url()对象

      E.g。

      class LampDelete(DeleteView):
          model = Lamp
      
          def get_success_url(self):
              category = self.object.category
              return reverse('productlist', args=[category])