Для комментариев Django необходимо действие «Удалить» для не суперпользователей - PullRequest
3 голосов
/ 17 мая 2011

Я недавно обновил большую версию 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 голосов
/ 17 мая 2011

В приложении комментариев есть действие «Удалить выбранные комментарии». Когда вы применяете это действие, он «помечает» комментарий как удаленный вместо удаления из базы данных - он создает удаленный флаг для комментария и устанавливает comment.is_removed = True.

Я рекомендую дать модераторам разрешение comments.can_moderate и таким образом удалять комментарии. Если вы действительно хотите, чтобы ваши модераторы могли удалять комментарии, вы можете сделать следующее:

  1. подкласс CommentsAdmin в admin.py
  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 голосов
/ 02 марта 2015
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

Этот код отключен, удалить и добавить действия.Также удалите меню действий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...