Al visualizar la lista de cambios de administrador para un modelo, ¿es posible hacer que las columnas que corresponden a las claves externas se vinculen a sus páginas respectivas? Un ejemplo simple es que tengo un objeto Foo que contiene Bar como una clave foránea. Si estoy viendo la lista de cambios administrativos para Foo (y la configuro para que incluya Bar en las columnas display_list), la columna principal se vinculará a la página de edición de la instancia Foo, mientras que la columna Bar enlazará a la página de edición de la instancia Boo. Entiendo que puedo anular la plantilla que se usa, pero tenía curiosidad por saber si había alguna solución que no lo requiriera.Cambiar el enlace de la lista a la página de cambio de clave externa
Respuesta
Puede definir un método personalizado para utilizar en la lista de cambios que devuelve el código HTML del enlace.
from django.core.urlresolvers import reverse
class MyFooAdmin(admin.ModelAdmin):
list_display = ('foo', 'bar_link')
def bar_link(self, obj):
url = reverse('admin:myapp_bar_change', args=(obj.pk,))
return '<a href="%s">Edit Bar</a>' % url
bar_link.allow_tags = True
Uno de los problemas con su pregunta como se ha dicho - si Foo tiene una clave externa a Bar, entonces cada foo enlaces a una sola barra, lo que puede enlazar a la página de edición para ese bar. Sin embargo, cada barra se vincula a múltiples foos, por lo que no tiene sentido pedir un enlace a 'la página de edición de la instancia de Foo'. Lo que puede hacer es un enlace a la página de lista de cambios de Foo con el conjunto de filtros para mostrar sólo los casos que tienen enlaces a Bar:
def foo_link(self, obj):
url = reverse('admin:myapp_foo_changelist')
return '<a href="%s?bar=%s">See Foos</a>' % (url, obj.pk)
foo_link.allow_tags = True
que encontré y le gusta la respuesta de Daniel, aunque la variante de lista de cambios pone fin a cualquier cambio que ya he hecho. Así que esta es una manera de arreglar eso:
primer lugar usted necesita para obtener una referencia a la solicitud, se puede hacer que envolviendo changelist_view
o queryset
como lo hice:
class CountryAdmin(ModelAdmin):
model = Country
list_display = ('pk', 'continent_changelist')
# ...
def queryset(self, request):
self._get_params = request.GET
return super(CountryAdmin, self).queryset(request)
def continent_changelist(self, obj):
url = reverse('admin:yourapp_country_changelist')
querystring = self._get_params.copy()
querystring['continent__id__exact'] = obj.continent.pk
return u'<a href="{0}?{1}">{2}</a>'.format(
url, querystring.urlencode(), obj.continent)
continent_changelist.allow_tags = True
Eso le dará un filtro dentro de las filas de la lista de cambios. Respondí esto en otra pregunta, pero este era el lugar en el que realmente estaba primero, así que quería registrarlo aquí. :-)
- 1. ¿Cómo cambiar el nombre de la clave externa?
- 2. ¿Cómo cambiar la acción referencial de la clave externa? (Comportamiento)
- 3. Cambiar el nombre de columnas de clave externa en MySQL
- 4. Cómo cambiar el valor de la clave principal y actualizar la clave externa al mismo tiempo
- 5. Pantalla de GNU: cambio de enlace de clave global
- 6. Sublime Text 2 - enlace de clave para cambiar la sintaxis
- 7. Cordova/Phonegap carga de la página externa página de inicio
- 8. Pregunta de la clave externa de MySQL
- 9. Cambio clave de la matriz sin fin
- 10. Zend_Pdf Agregar el enlace de texto a la página pdf
- 11. Clave externa para la clave compuesta
- 12. Cambio de clave principal de MySQL cuando existe contraints clave externa
- 13. clave externa cakephp no la clave primaria
- 14. Referencia de clave externa a la tabla en otro esquema
- 15. Cambiar el enlace `Proc` durante la invocación
- 16. Jquery getJSON a la página externa de PHP
- 17. Hibernar: La clave externa tiene el número incorrecto de columnas
- 18. ¿La clave externa mejora el rendimiento de las consultas?
- 19. Cambio de clave principal
- 20. cambiar el tamaño de la página
- 21. clave externa Hibernate como parte de la clave primaria
- 22. Django objeto de modelo con la creación de clave externa
- 23. Agregar enlace a la página de administración de django
- 24. ¿Clave externa a una de muchas tablas?
- 25. Cambiar la transición de la página en la misma página
- 26. diferencias entre "clave externa" y "restricción de clave externa"
- 27. clave externa condicional PostgreSQL
- 28. Cómo cambiar el pie de página Con la tecnología de Drupal y su enlace?
- 29. doctrine2 La relación OneToMany inserta NULL como la clave externa
- 30. Solicitar Django resultados de la consulta por la clave externa
Voy a intentarlo. Lo que quise decir al vincular a la página de cambios de Foo es solo mantener el enlace predeterminado a la página de cambios de Foo de la lista de cambios de Foo (admito que no fui muy claro con eso). – Adam
Cualquier actualización sobre esto en 1.4 o 1.5 (me refiero a que esto parece una gran adición a Django en sí, así que tal vez ya se haya agregado a 'contrib.admin')? –