2011-05-04 12 views
6

He creado una clase de administrador personalizada para mostrar el Administrador de comentarios en mi aplicación Django. Lo que me gustaría hacer es que los elementos en "Objeto ID" se vinculen a la página de objetos de edición de sus respectivos objetos. ¿Cómo lo lograría?¿Cómo vincular a un objeto diferente desde una vista de administrador de Django?

Mis comentarios de administración:

class MyCommentsAdmin(admin.ModelAdmin): 
    fieldsets = (
     (_('Content'), 
      {'fields': ('user', 'user_name', 'user_email', 'user_url', 'comment')} 
     ), 
     (_('Metadata'), 
      {'fields': ('submit_date', 'ip_address', 'is_public', 'is_removed')} 
     ), 
    ) 

    list_display = ('id', 'name', 'comment', 'content_type', 'object_pk', 'ip_address', 'submit_date', 'is_public', 'is_removed') 
    list_filter = ('submit_date', 'site', 'is_public', 'is_removed') 
    date_hierarchy = 'submit_date' 
    list_display_links = ('id','comment',) 
    ordering = ('-submit_date',) 
    raw_id_fields = ('user',) 
    search_fields = ('comment', 'user__username', 'user_name', 'user_email', 'ip_address') 

admin.site.unregister(Comment) 
admin.site.register(Comment, MyCommentsAdmin) 

Gracias !!

Respuesta

11

Defina un método personalizado en la clase de administrador y haga referencia a eso en su tupla list_display.

from django.core.urlresolvers import reverse 
class MyCommentsAdmin(admin.ModelAdmin): 

    list_display = ('id', 'name', 'comment', 'content_type', 'object_link', 'ip_address', 'submit_date', 'is_public', 'is_removed') 
    list_select_related = True 

    def object_link(self, obj): 
     ct = obj.content_type 
     url = reverse('admin:%s_%s_change' % (ct.app_label, ct.model), args=(obj.id,)) 
     return '<a href="%s">%s</a>' % (url, obj.id) 
    object_link.allow_tags = True 

Nota He añadido list_select_related=True, como el método object_link hace referencia al modelo de content_type, por lo que sería de otro modo causar una carga completa de consultas adicionales.

+0

Gracias. Hay un pequeño error aquí en alguna parte. El 'id' que se devuelve no es el ID del objeto, sino el propio ID del comentario. ¿Cómo voy a arreglar esto? – rabbid

+0

Cambié 'obj.id' a' obj.object_pk'. ¡Gracias! – rabbid

+2

Estoy usando Django 1.7 y necesito cambiar 'obj.content_type' a' obj._meta' y cambiar 'ct.model' a' ct.model_name'. – adam

Cuestiones relacionadas