如何在django中删除多个删除
Posted
技术标签:
【中文标题】如何在django中删除多个删除【英文标题】:how to delete multiple delete in django 【发布时间】:2018-11-30 13:10:24 【问题描述】:怀疑:
这里我提到了html和输出Image。
如果我单击全选选项(复选框),它将选择所有图像,但我的疑问是单击删除按钮后如何删除所有图像。
HTML
% for j in img %
<h4>
Select All
<input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" />
</h4>
<button class="btn btn-danger" action=" ">Delete</button>
<div class="col">
% if i.placename == j.gallery_place %
<div class="show-image">
<img src="j.gallery_image.url" style="height:130px; width:130px;" />
<tag class="one" style="margin:8%">
<input type="checkbox" name="selected[]" value="j.id" />
</tag>
</div>
% endif %
</div>
% endfor %
图片
enter image description here
【问题讨论】:
您可以将所有 id 添加到例如POST
请求中,然后让服务器删除这些(例如批量)。
@WillemVanOnsem Actullay 我是 django 的新手,所以我不知道在哪里添加它。
【参考方案1】:
您可以在 Django 中使用FormView 并按如下方式处理它们。您需要先创建一个带有复选框的表单:
# forms.py
class CheckboxesForm(forms.Form):
checkboxes = forms.ModelMultipleChoiceField(
MyModel.objects.all(),
widget=forms.CheckboxSelectMultiple)
然后你需要编写自己的FormView并重写form_valid()方法来执行选中对象的删除。如果要定义具有复选框的对象,可以覆盖 get_form() 方法。
# views.py
class MyListView(ListView):
"""
View displaying a list of objects, you will redirect here after successfully deleting the objects you want
"""
model = MyModel
class MyView(FormView):
"""
Class based view taking care of rendering the form and processing it after posting. Finally, redirects you to your list view defined above.
"""
form_class = MyForm
def get_context_data(self, **kwargs):
context = super(MyView, self).get_context_data(**kwargs)
context['objects'] = MyModel.objects.all() # Customize this queryset to your liking
return context
def get_form(self, form_class=None):
form = super().get_form(form_class)
form.fields['checkboxes'].queryset =
MyModel.objects.all() # Customize this queryset to determine for which objects you want to display checkboxes
return form
def form_valid(self, form):
qs = myModel.objects.filter(
pk__in=list(map(int, self.request.POST.getlist('checkboxes'))))
qs.delete()
return HttpResponseRedirect(reverse_lazy('someurl'))
您的模板将如下所示(改编自您发布的内容)
# template.html
% for j in objects %
<h4>
Select All
<input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" />
</h4>
<button class="btn btn-danger" action=" ">Delete</button>
<div class="col">
% if i.placename == j.gallery_place %
<div class="show-image">
<img src="j.gallery_image.url" style="height:130px;
width:130px;" />
<tag class="one" style="margin:8%">
<div class="form-checkbox"><input type="checkbox" name="checkboxes" value=" j.pk ">
</tag>
</div>
% endif %
</div>
% endfor %
最后,连接网址。
# urls.py
from django.conf.urls import include, url
from.views import MyView, MyListView
urlpatterns = [
url(r'^listdelete/$', MyView.as_view(), name="delete-list"),
url(r'^mylist/$, MyListView.as_view(), name="someurl"),
]
【讨论】:
我想在 urls.py 中传递什么。而且我们没有在删除按钮中传递 url。 @brunostuyts 我还添加了 url 配置,并添加了更多代码以确保完整性。您可能想阅读 Django class based views以上是关于如何在django中删除多个删除的主要内容,如果未能解决你的问题,请参考以下文章
如何使用显示多个对象项的视图并在从 Django 数据库中删除其中一项后显示 html?