Django admin: cambia la casilla seleccionada de campos relacionados para autocompletar

Tenemos algunos modelos que tienen un usuario como clave externa. Pero con aproximadamente 25000 usuarios en nuestro sistema, es un poco difícil encontrar el que necesitamos.

¿Hay alguna solución que sea mejor que el cuadro de selección? ¿Tal vez un autocompletado para que podamos comenzar a escribir el nombre de usuario / dirección? ¿O simplemente un cuadro de búsqueda? Cuando se cambia al usuario relacionado por estos objetos, cada vez es más difícil con 25000 usuarios sin clasificar.

Incluso solo configurarlo para ordenar a los usuarios por nombre de usuario sería útil.

Tuve este problema y mi conclusión fue utilizar un campo autocompletado en su lugar. Funciona bastante bien en la mayoría de los casos. El único problema es cuando tienes muchas entradas que son casi iguales. Por ejemplo, en su caso, si escribe Robert para el nombre y hay unos cientos de entradas de Robert en la lista …

Hay muchas aplicaciones que agregan autocompletado al administrador de Django:

  • django-extensions ( ForeignKeyAutocompleteAdmin )
  • django-autocompletar (en el código de google)
  • django-ajax-selecciona
  • django-admin-autocompletar
  • django-autocompletar (tyrion)

Mi preferida es la última. Está bien escrito, se puede usar con el administrador y fuera del administrador, funciona con ManyToManyFields, ForeignKeyFields, CharFields, etc.

Hice una bifurcación de este proyecto para mi cliente que agrega algunas sutilezas como un botón de búsqueda (lupa) como ForeignKeyRawIdWidget .

El administrador de Django 2.0 tiene autocompletado incorporado , solo establece el campo autocomplete_fields en la clase ModelAdmin . p.ej

 class QuestionAdmin(admin.ModelAdmin): ordering = ['date_created'] search_fields = ['question_text'] class ChoiceAdmin(admin.ModelAdmin): autocomplete_fields = ['question'] 

La solución más simple lista para ModelAdmin es agregar el campo a los ModelAdmin de su raw_id_fields . Luego, aparecerá una ventana emergente en la que puede usar los controles de búsqueda / filtrado y paginación integrados para encontrar y seleccione el objeto que está buscando.

Si realmente desea autocompletar, las otras respuestas le dan un punto de partida razonable.

Puede usar ForeignKeyRawIdWidget desde django.contrib.admin.widgets . Presenta las relaciones FK como una entrada con un pequeño botón a lo largo que presenta una ventana emergente que se puede buscar.

Hay una aplicación para eso (django-autocompletar).