我正在设计一个应用程序,其中任何工作人员都可以将项目添加到数据库中(使用SQLite3)并且想知道是否有办法获取它以便管理员(超级用户)可以查看所有这些更改和添加到数据库在显示之前?我的想法是,如果我以超级用户身份登录并转到管理员面板,则会显示工作人员已完成的所有操作,并允许接受或拒绝添加和编辑。
我也不确定是否有办法为应用程序生成报告,该报告将显示数据库的新增内容,并且可能允许超级用户下载csv或其他内容。我使用的是Django 1.7和python 2.7。
答案 0 :(得分:1)
django-reversion
是一个应用程序,允许您正在寻找的一些东西:
设置很简单;添加到INSTALLED_APPS
并迁移,然后子类化提供的VersionAdmin
类。应用程序本身创建所有已执行操作的db表,执行它们的人员,时间和序列化表示可以恢复的模型。设置非常简单,无需覆盖模型或疯狂。
from django.contrib import admin
from reversion.admin import VersionAdmin
@admin.register(YourModel)
class YourModelAdmin(VersionAdmin):
pass
您必须为报告创建自己的AdminAction
,但可以使用捆绑的VersionQuerySet类来检索给定模型的所有修订。这很容易,尤其是在使用Django AdminActions
for revision in Version.objects.get_for_model(model, model_db=None):
output_contents += '|'.join([str(revision.model), revision.user])
output_contents += '\r\n'
有些相关的是django-moderation
,您可以在其中注册带有钩子的模型,然后可以要求对模型对象进行审核。看一下使用它时获得的其他Manager方法:
>>> MyModel.objects.all().approved() # approved by moderator
>>> MyModel.objects.all().pending() # pending in moderation queue
>>> MyModel.objects.all().rejected() # rejected by moderator
>>> MyModel.objects.all().flagged() # flagged
>>> MyModel.objects.all().not_flagged() # not flagged
非主持人更改的对象将被放入队列中,并通过管理员批准/拒绝。
这两者可以协同工作,并且在串联使用时应该满足您的需求。