【问题标题】:Django: Save user-submitted data from ModelForm for admin review and committing at a later dateDjango:从 ModelForm 中保存用户提交的数据以供管理员审查并在以后提交
【发布时间】:2012-08-24 16:56:24
【问题描述】:

我的 Django 网站上有一个表单(使用 ModelForm 制作),用户可以在其中提交一些数据来创建新对象或修改现有对象。但是,这些数据在提交到数据库之前需要由我们的员工审核,有时会在以后批量审核。

我知道我可以在我的表单处理视图中使用.save(commit=False) 来返回一个尚未保存到数据库中的对象。但是有没有办法从多个用户提交中收集所有这些对象以供以后查看?理想情况下,我应该有一个管理页面,其中包含带有“提交”或“拒绝”按钮的提交摘要列表。

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    没有一种开箱即用的方法来做到这一点(至少没有内置于 Django),因此您需要自己创建逻辑,这应该非常简单。一些需要考虑的方法:

    1. 有第二个模型/表格用于保存您的表单,然后为审查功能创建一个视图,将所有已批准的记录复制到第一个表格中。

    2. 避免使用第二个模型/表并将approved = BoolField(default=False) 字段添加到您的模型/表中。将objects 设置为custom manager,它会过滤default=True,因此您的代码的其余部分默认情况下只会看到已批准的记录。让第二个经理做相反的事情,即过滤未批准的记录。使用第二个管理器,为审核功能创建一个视图,该视图将 approved 翻转到 True 以获取任何获得批准的内容。

    3. 1234563然后,您可以使用管理员的内联显示和编辑功能来一目了然地查看记录并根据需要单击批准。

    【讨论】:

    • 这些是我的想法。 #2/3 的问题是如何对修改过的对象执行此操作(尽管仅对新对象很简单)。 #1的唯一问题是重复,但我认为这就是我要走的路。 (还有 this 可以满足我的要求。)
    • @Danos2000,那个django-moderation 应用看起来很有趣。它似乎是方法 1 的升级版、封装良好且可配置的版本,使用单独的表来保存未批准的对象,并在批准后将它们复制到实际表中。
    • @Danos2000,如果您确实想自己动手,来处理更改的对象,您可以尝试save() 中的django-dirtyfields 之类的方法,看看是否有任何更改,如果是,请翻转已批准状态返回False(用于方法 2/3)或将记录移回未批准表(用于方法 1)。如果更适合您的情况,您还可以在表单级别实现类似的更改逻辑(this 可能很有用)。
    猜你喜欢
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2016-07-07
    相关资源
    最近更新 更多