Django评论需要一个非超级用户的删除操作

3

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

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

相关代码位于contrib.comments.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个回答

2
在评论应用中,有一个“删除选定评论”的操作。当你应用这个操作时,它会将评论标记为已删除,而不是从数据库中删除--它为评论创建了一个已删除标志,并设置comment.is_removed = True
我建议您给您的管理员comments.can_moderate的权限,并以这种方式删除评论。如果您真的希望您的管理员能够删除评论,您可以按照以下步骤进行操作:
1. 在admin.py中创建一个子类CommentsAdmin 2. 重写get_actions方法 3. 注销CommentsAdmin ModelAdmin,然后注册您的子类。
要实现这一点,请在您的应用程序中放置以下代码。
# 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)

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

这段代码已禁用删除和添加操作。同时移除操作菜单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接