【问题标题】:Delete multiple objects in django删除django中的多个对象
【发布时间】:2012-02-26 22:24:04
【问题描述】:

我需要使用网页从 django 的数据库中选择要删除的几个对象。没有可供选择的类别,所以我不能像那样从所有类别中删除。我是否必须实现我自己的删除表单并在 django 中处理它,或者 django 是否已经有办法做到这一点?在管理界面中实现。

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    您可以删除任何您想要的查询集。例如,删除所有带有某个 Post 模型的博客文章

    Post.objects.all().delete()
    

    并删除任何具有未来发布日期的帖子

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

    但是,您确实需要想出一种方法来缩小查询集的范围。如果您只是希望视图删除特定对象,请查看delete generic view

    编辑:

    很抱歉造成误解。我认为答案介于两者之间。要实现您自己的,请结合 ModelForms 和 generic views。否则,请查看提供类似功能的 3rd 方应用程序。在related question 中,推荐的是django-filter

    【讨论】:

    • 不,你误解了这个问题。我知道我可以删除所有内容。但我需要使用网页上的表单选择要删除的对象。然后在我的views.py中处理表单返回的数据。然后循环遍历表单中返回的内容,因为它循环遍历数据。但我想知道在 django 中实现这一点的最佳实践是什么。
    • 啊,我的错!我要么使用第三方应用,要么使用ModelForms 的通用视图。
    • @Dean,看看那个删除视图。或者你可以写你自己的观点......我的意思是最终你可能会收到一个PK列表并在你的模型上调用删除......MyModel.objects.filter(id__in=request.POST.getlist('delete_list')).delete()我相信你想要一些东西来确保随机的人可以' t 通过猜测 PK 来删除数据库中的所有对象。
    • @Dean,如果不了解更多信息,很难回答您的问题。您只需要构建一个允许用户选择正确删除条件的表单(无论可能是什么 - 甚至可能是一个输入框,其中输入一个 ID 号......但可能更复杂),构建一个对此作出响应的视图表单,也许执行验证(权限),然后最终运行 filter(foo).delete() 方法。
    • 框架没有提供此功能的原因之一是编辑/删除的授权问题以及@YujiTomita 提到的其他复杂性。如果您确实需要复杂的过滤,请查看 django-filtering 并添加一个删除按钮,如果用户被授权,则调用 QuerySet.delete()。
    猜你喜欢
    • 1970-01-01
    • 2020-02-13
    • 2020-06-15
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    相关资源
    最近更新 更多