我最近将大型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安装的情况下覆盖它?
(如果有人知道为什么这会改变,我有兴趣知道。)
答案 0 :(得分:2)
在评论应用中,有一个“删除所选评论”操作。当您应用此操作时,它会将注释“标记”为已删除而不是从数据库中删除 - 它会为注释创建已删除的标记并设置comment.is_removed = True
。
我建议您为版主提供comments.can_moderate
权限,并以此方式删除评论。如果您确实希望主持人能够删除评论,您可以执行以下操作:
CommentsAdmin
get_actions
方法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)
答案 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
禁用此代码删除并添加操作。同时删除操作菜单。