¿Hay alguna forma de extender otra aplicación ModelAdmin?Django: ¿se extienden otras aplicaciones ModelAdmin?
Tengo un proyecto que usa la funcionalidad ofrecida por django.contrib.comments.
clase El CommentsAdmin ModelAdmin tiene:
actions = ["flag_comments", "approve_comments", "remove_comments"]
me gustaría extender el CommentsAdmin ModelAdmin en mi proyecto para incluir una acción ban_user
.
He intentado crear mi propio objeto NewCommentsAdmin(CommentsAdmin)
en mi archivo admin.py y registrarlo, pero recibo un aviso '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)
¿Hay una manera de hacer esto sin modificar el código django.contrib.comments original?
Um, esto es mucho más complicado de lo necesario. Simplemente importe CommentAdmin, subclasselo, elimine el registro una vez, y registre su versión. –
@Carl Meyer: ¿Estás seguro? Intenté que el widget del mapa de Geodjango funcionara en la interfaz. Para eso, necesitaba importar mi AdminModel personalizado definido en mi archivo 'admin.py'. Cuando importo esta clase, la función 'admin.site.register' se ejecutó de nuevo. Ese es mi punto. Cuando intenta importar la clase, intenta registrar el modelo nuevamente.¿Lo conseguiste trabajando con éxito? Si hay otra solución, estoy más que complacido aquí. –
El código de nivel de módulo solo se ejecuta dos veces si el módulo se importa a través de dos rutas diferentes. En general, esto no debería suceder. No sé si GeoDjango hace algo funky, nunca lo usó. Vea mi respuesta para la versión simple que tengo trabajando en producción. –