我有一个项目列表。我正在使用ListView显示它们。列表中的每个项目都在可折叠块中。我想在可折叠块中放置两个按钮,一个用于编辑项目,第二个用于删除:
<a class='btn btn-success' style = 'float:left;' href="/scale/{{scale.pk}}/">Edit Scale</a>
<a class='btn btn-danger' style = 'float:right;' href="/scales" name="delete_btn">Delete Scale</a>
编辑按钮没问题。单击它时,它将转到另一个页面,该页面具有不同的模板和views.py中的不同类(扩展到UpdateView)。
但我无法弄清楚如何使用删除按钮删除对象。 当我点击删除按钮时,我不想转到另一个页面,因此我不需要单独的模板。
我试图将我的课程扩展到DeletionMixin:
class ScaleListView(DeletionMixin, ListView):
context_object_name = 'Scales'
model = Scale
success_url = reverse_lazy('scale_list')
def post(self, *args, **kwargs):
print 'post in scale list'
return DeletionMixin.post(self, *args, **kwargs)
def get_context_data(self, **kwargs):
print 'get_context_data in ScaleListView'
context = super(ScaleListView, self).get_context_data(**kwargs)
context['header_name'] = 'Scale list'
return context
我试图覆盖Deletionmixin的post和delete方法,但我真的不知道如何将删除按钮关联到这里。
我读了this page,警告说,并非所有mixins和基于类的视图都可以一起使用。但我认为问题不在这里。
有人可以解释如何使这项工作吗?
答案 0 :(得分:1)
有几个问题。
首先,post()中的return语句正在创建一个单独的DeletionMixin实例,这意味着它将无法引用ScaleListView实例的任何字段或方法。你需要这样的东西:
return super(ScaleListView, self).post(request, *args, **kwargs)
但这不能解决你的问题。 DeletionMixin调用get_object(),ListView或它的任何父类都没有实现。 DeletionMixin假设您一次只会删除一个对象(这听起来像是您尝试做的事情)。尝试使用DetailView而不是ListView,看看它能带给你什么。
(为什么DetailView,当你使用列表时?因为你不希望视图对整个列表做任何事情。你只是处理一个单独的记录(即&和#34; detail&#34;),这就是为什么这更有意义。)