Я думаю, у вас есть что-то вроде этого в верхней части вашего файла:
from django.contrib.comments.admin import CommentAdmin
Этот импорт выполняет регистрацию модели (в самом низу этого админ-файла) снова .
Одна идея, которая выглядит не очень хорошо (я на самом деле не пробовал) может быть:
from django.contrib.comments.models import Comment
from django.contrib import admin
from django.contrib.admin.sites import NotRegistered
# Try to unregister the Comment model
# that was registered via the auto_discover method
try:
admin.site.unregister(Comment)
except NotRegistered:
pass
# Now we can load the CommentAdmin (which reregisters the admin model)
from django.contrib.comments.admin import CommentAdmin
# We have to unregister again:
try:
admin.site.unregister(Comment)
except NotRegistered:
pass
# Now your stuff...
Я думаю, это можно сделать лучше, но это должно сработать. Чтобы этот подход работал, приложение, содержащее этот файл, должно быть после приложения комментариев в INSTALLED_APPS
.
Теперь к вашему классу. Я думаю, что если вы напишите actions = ['ban_user']
, вы на самом деле перезапишите все действия в родительском классе. Я думаю, что это самый простой способ переопределить метод get_actions
:
class NewCommentAdmin(CommentAdmin):
def get_actions(self, request):
actions = super(NewCommentAdmin, self).get_actions(request)
# Do some logic here based on request.user if you want
# to restrict the new action to certain users
actions.append('ban_user')
return actions
def ban_user(self, request, queryset):
pass
admin.site.register(Comment, NewCommentAdmin)
Надеюсь, что это помогает (или, по крайней мере, дает представление):)