有没有一种方法可以扩展另一个应用程序的ModelAdmin?
我有一个使用django.contrib.comments提供的功能的项目。 CommentsAdmin ModelAdmin类有: “actions = [“ flag_comments”,“ approve_comments”,“ remove_comments”]” 我想在我的项目中扩展CommentsAdmin ModelAdmin,以包括一个操作“ ban_user”。
我尝试在我的admin.py文件中创建自己的NewCommentsAdmin(CommentsAdmin)对象并注册它,但是我收到一个通知:“AlreadyRegistered at /admin/ 'The model Comment is already registered'”。
我有一个使用django.contrib.comments提供的功能的项目。 CommentsAdmin ModelAdmin类有: “actions = [“ flag_comments”,“ approve_comments”,“ remove_comments”]” 我想在我的项目中扩展CommentsAdmin ModelAdmin,以包括一个操作“ ban_user”。
我尝试在我的admin.py文件中创建自己的NewCommentsAdmin(CommentsAdmin)对象并注册它,但是我收到一个通知:“AlreadyRegistered at /admin/ 'The model Comment is already registered'”。
class NewCommentAdmin(CommentAdmin):
actions = ['ban_user']
def ban_user(self, request, queryset):
pass
admin.site.register(Comment, NewCommentAdmin)
有没有一种方法可以在不修改原始的django.contrib.comments代码的情况下实现这一点?
admin.py
文件中定义的自定义AdminModel。当我导入这个类时,admin.site.register
函数再次被执行。这就是我的观点。当您尝试导入该类时,它会尝试重新注册该模型。你成功地让它工作了吗?如果有其他解决方案,我很乐意听取。 - Felix Klingauto_detect()
函数通过from project.app import admin
导入了我的admin.py
,而我在同一个应用程序中通过from app.admin import ModelAdmin
导入它,那么这段代码会被执行两次?如果是这样的话,那么我描述的问题只会在你想要覆盖自定义ModelAdmin时出现,因为对于导入django contrib stuff,你总是使用相同的路径。 - Felix Klingdef ban_user(self, request, queryset): for u in queryset: pass
admin.site.unregister(Comment) admin.site.register(Comment, NewCommentAdmin) - Aaron C. de Bruyn