python - practices - django models ejemplos
Mejora del rendimiento de los campos de Django ForeignKey en Admin (4)
De forma predeterminada, el administrador de Django presenta los campos de ForeignKey en el administrador como un campo de selección, enumerando cada registro en la tabla externa como una opción. En un modelo accesible al administrador, estoy haciendo referencia al modelo de Usuario como ForeignKey, y como tengo miles de usuarios, Django está llenando el selecto con miles de opciones. Esto hace que la página de administración se cargue increíblemente lentamente, y la selección no es muy útil ya que puede llevar un tiempo desplazarse por las miles de opciones para encontrar la que desea.
¿Cuál es la mejor manera de cambiar la representación de este campo para mejorar la carga de la página y la usabilidad? Me gustaría que el campo de selección fuera reemplazado por algún tipo de botón para iniciar una ventana emergente de formulario de búsqueda, o un campo de texto que busque palabras clave a través de Ajax para encontrar la identificación del usuario específico que desea asociar. ¿Tiene el administrador algo como esto incorporado, o tendría que escribirlo desde cero?
Agregue raw_id_fields
a su modelo para mostrar solo la ID en lugar de un menú desplegable.
Otra opción es agregar readonly_fields
lugar de raw_id_fields
Puedes usar una de las pocas aplicaciones autocompletadas para Django. Revísalos en los paquetes de Django .
También hay django-extensions que tienen ForeignKeyAutocompleteAdmin
que se ajustan a sus necesidades bastante bien.
Tienes razón, Cerin, la causa de la desaceleración es porque Django está poblando el elemento <select>
con demasiadas opciones. Es posible que desee utilizar un elemento de autocompletado en su lugar.
Curiosamente, Django 2.0 ha introducido una nueva característica en el sitio de administración, llamada autocomplete_fields
, que creo que encontrará útil en este caso. Utiliza AJAX.
class ExampleAdmin(models.ModelAdmin):
autocomplete_fields = [''example_field_user'']