【发布时间】:2015-02-21 21:27:55
【问题描述】:
我看过几篇描述在 Django 中使用视图和复选框删除项目的帖子。我已经完成了使用 AJAX 删除单个项目。我目前的问题是我无法弄清楚如何在我的 Django 应用程序中使用复选框和 AJAX 删除多个项目。
我最初使用 Django 的 GCBV,DeleteView,这适用于单对象删除。但正如@Craig Blaszczyk 指出的那样,DeleteView 仅用于:删除单个对象。所以我需要编写一个新视图来删除多个对象,并附带一个表单和发送ids 数组的 AJAX 调用。
我有这个功能,但感觉很笨重,而且效果不太好。我的 AJAX 脚本在这里:
$.ajax({
type: 'POST',
url: '/dashboard/images/delete/',
data: {'ids': ids},
success: function() {
console.log(date_time + ": AJAX call succeeded.");
},
error: function() {
console.log(date_time + ": AJAX call failed!");
console.log(date_time + ": Image ID: " + ids + ".");
}
});
在这个脚本中(在此处显示的部分上方),我构建了一个 id 数组并作为数据发送。
所以在我的 CBV 中,我正在收集选定的 id 并删除它们:
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
GalleryImage.objects.filter(pk__in=request.POST.getlist('ids[]')).delete()
return render(request, self.template_name, {'form': form})
这是我使用的表格:
class DeleteImagesForm(forms.Form):
ids = forms.ModelMultipleChoiceField(
queryset=GalleryImage.objects.all(),
widget=forms.CheckboxSelectMultiple(),
)
有什么更好的方法来做到这一点?我觉得我在没有非常好的做法的情况下破解了这个解决方案。
此外,尽管它似乎可以正常工作,但我觉得我应该在调用form.is_valid() 后删除这些图像。
在赏金结束前有什么最后的话吗?
【问题讨论】:
标签: ajax django checkbox delete-row