在Django中删除多个对象

10 浏览
0 Comments

在Django中删除多个对象

我需要在Django中使用网页选择要从数据库中删除的几个对象。没有可供选择的类别,所以我不能像那样从所有类别中进行删除。我需要自己实现删除表单并在Django中进行处理吗,还是Django已经有一种可以实现这一功能的方法?就像在管理界面中那样。

0
0 Comments

在Django中,我们可以删除任何想要删除的QuerySet。比如,要删除所有具有某个Post模型的博客文章:

Post.objects.all().delete()

要删除任何具有未来发布日期的Post:

Post.objects.filter(pub_date__gt=datetime.now()).delete()

但是,你需要找到一种方法来缩小你的QuerySet范围。如果你只想删除特定的对象,可以查看delete generic view

编辑:

对于这个问题的误解很抱歉。我认为答案应该介于两者之间。要实现自己的方法,可以结合ModelFormgeneric views。或者,可以使用提供类似功能的第三方应用程序。在相关问题中,建议使用django-filter

不,你误解了问题。我知道我可以删除所有东西。但是我需要通过网页上的表单选择要删除的对象。然后在我的views.py中处理从表单返回的数据。然后循环遍历从表单返回的数据,并在循环过程中删除数据。但是我想知道在Django中实现这个的最佳实践是什么。

哦,我弄错了!我要么使用第三方应用程序,要么使用带有ModelForm的generic views。可以看看那个delete view。或者你也可以编写自己的view...我的意思是,最终你可能会收到一个PK列表,并在你的模型上调用delete...MyModel.objects.filter(id__in=request.POST.getlist('delete_list')).delete(),我相信你希望有一些方法来确保一个随机的人不能通过猜测PK来删除数据库中的所有对象。

你能写得更详细一点吗?因为那正是回答我问题的东西。

很难在不了解更多细节的情况下回答你的问题。你只需要构建一个表单,允许用户选择正确的删除条件(无论是什么 - 也许甚至是一个输入框,用户在其中输入一个ID号码...但可能更复杂一些),构建一个响应该表单的view,可能进行验证(权限),然后最后运行那个filter(foo).delete()方法。

这个框架没有自带的原因之一是编辑/删除的授权问题和其他复杂性。如果你确实需要复杂的过滤,请查看django-filtering,并添加一个调用QuerySet.delete()的删除按钮,如果用户有权限的话。

0