【问题标题】:Not to allow to delete models in django project for demo product不允许删除 django 项目中用于演示产品的模型
【发布时间】:2012-08-30 14:02:38
【问题描述】:

我有一个基于 django 框架构建的演示产品,并且正在实时运行。潜在客户将以超级用户访问权限登录 UI。我想显示删除选项,但是当他们执行删除选项时,我想显示“不允许演示登录”之类的消息。

有没有办法在 django 框架中快速实现这一点。这样做的最佳选择是什么。

谢谢 湿婆

【问题讨论】:

  • 你是指the UI 的django 管理界面吗?还是你自己写 UI?
  • 你为什么不用javascript模仿删除(隐藏),让他们获得经验?
  • 您是否尝试覆盖 delete() 方法?检查类型演示用户,并返回错误消息。

标签: django django-admin django-middleware


【解决方案1】:

我会创建一个员工用户,绝对不是超级用户。这将使您能够利用 Django 的内置权限,这在您的情况下似乎很方便。

创建一个有权添加和编辑演示模型的用户,删除。

通过ModelAdminadd a custom view将JS文件添加到您的change_form

class DemoModelAdmin(admin.ModelAdmin):
    class Media:
        js = (
            '/static/js/mimic_delete.js',
        )

admin.site.register(DemoModel, DemoModelAdmin)

在您的mimic_delete.js 文件中,您可以添加一个jQuery 循环,为DemoModel 变更表的results_list 中的每一行添加一个删除按钮,并添加一个隐藏事件onclick 或任何您想要的表示形式。

另一种方法是将模型条目绑定到会话并覆盖 ModelAdmin 的 get_queryset 以过滤用户在当前会话中创建的条目,并在会话过期后清理它们。

【讨论】:

  • 感谢您的建议。我的产品有点复杂,有数百种模型和多种应用。我不想在多个地方更改代码。我想在 1 个地方进行更改。通过捕获 URL 在中间件中或在负责删除工作的 django 的 options.py 文件中说。
【解决方案2】:

我通过创建一个演示用户并将以下代码添加到中间件类来解决此问题:

                    if request.user.username == 'demo':
                            if '/delete' in path:
                                    request.user.message_set.create(message='Delete/Edit option is disabled for demo account.')
                                    return HttpResponseRedirect("../../")
                            if path.startswith ('/admin/') and request.method == 'POST' and request.POST.has_key('action'):
                                    axnname   = request.POST.get('action')
                                    if axnname == 'delete_selected':
                                            request.user.message_set.create(message='Delete/Edit option is disabled for demo account.')
                                            return HttpResponseRedirect(path)
                            if path.startswith ('/admin/') and request.method == 'POST' and request.is_ajax() is False:
                                    request.user.message_set.create(message='Add/Edit option is disabled for demo account.')
                                    return HttpResponseRedirect("../")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2020-10-28
    • 2019-10-09
    相关资源
    最近更新 更多