Django评论需要针对非超级用户的删除操作

时间:2011-05-16 22:36:25

标签: django comments admin action

我最近将大型Django安装从1.1升级到1.3。在评论应用中,他们添加了一个警告,因此只有超级用户才能获得删除操作。

拥有删除权限的版主不会看到这些操作。这对他们来说真的很不方便。

有问题的代码在contrib28ments.admin中,从第28行开始:

def get_actions(self, request):
    actions = super(CommentsAdmin, self).get_actions(request)
    # Only superusers should be able to delete the comments from the DB.
    if not request.user.is_superuser and 'delete_selected' in actions:
        actions.pop('delete_selected')

它应该询问request.user是否具有删除权限。

如何在不使用实际Django安装的情况下覆盖它?

(如果有人知道为什么这会改变,我有兴趣知道。)

2 个答案:

答案 0 :(得分:2)

在评论应用中,有一个“删除所选评论”操作。当您应用此操作时,它会将注释“标记”为已删除而不是从数据库中删除 - 它会为注释创建已删除的标记并设置comment.is_removed = True

我建议您为版主提供comments.can_moderate权限,并以此方式删除评论。如果您确实希望主持人能够删除评论,您可以执行以下操作:

  1. 继承admin.py
  2. 中的CommentsAdmin
  3. 覆盖get_actions方法
  4. 取消注册CommentsAdmin ModelAdmin,然后注册您的子类。
  5. 为此,请将以下代码放入您的某个应用中。

    # myapp.admin.py
    # The app should come after `django.contrib.comments` 
    # in your INSTALLED_APPS tuple
    
    from django.contrib.comments.admin import CommentsAdmin
    
    class MyCommentsAdmin(CommentsAdmin):
        def get_actions(self, request):
            actions = super(MyCommentsAdmin, self).get_actions(request)
            if not request.user.has_perm('comments.can_moderate'):
                if 'approve_comments' in actions:
                    actions.pop('approve_comments')
                if 'remove_comments' in actions:
                    actions.pop('remove_comments')
            return actions
    
    
    admin.site.unregister(CommentsAdmin)
    admin.site.register(MyCommentsAdmin)
    

答案 1 :(得分:0)

def has_add_permission(self, request):
    return False

def has_delete_permission(self, request, obj=None):
    return False

def get_actions(self, request):
    actions = []
    return actions

禁用此代码删除并添加操作。同时删除操作菜单。