2012-03-20 49 views
15

Tenemos algunos modelos que tienen un usuario como clave externa. Pero con alrededor de 25000 usuarios en nuestro sistema, es un poco desalentador encontrar el que necesitamos.Administrador de Django: Cambie el cuadro seleccionado de campos relacionados para autocompletar

¿Hay alguna solución que sea mejor que la casilla de selección? ¿Tal vez una autocompletar para que podamos comenzar a escribir el nombre de usuario/dirección? ¿O solo un cuadro de búsqueda? Al cambiar el usuario relacionado para estos objetos, se hace cada vez más difícil con 25000 usuarios sin clasificar.

Incluso establecerlo para clasificar a los usuarios por nombre de usuario sería útil.

+0

Esto parece estar caliente: https://github.com/yourlabs/django-autocomplete-light – Paolo

Respuesta

21

Tuve este problema y mi conclusión fue utilizar un campo de autocompletar 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 pocos cientos de Robert entradas en la lista ...

Hay muchas aplicaciones que añaden autocompletar a la administración de Django:

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

Hice un fork de este proyecto para mi cliente que agrega algunas sutilezas como una búsqueda (lupa) como el ForeignKeyRawIdWidget.

+0

Lovely .. Gracias – CrazyGeek

4

Puede usar el ForeignKeyRawIdWidget desde django.contrib.admin.widgets. Representa las relaciones FK como una entrada con un pequeño botón a lo largo del lado que presenta una ventana emergente con capacidad de búsqueda.

5

El más simple fuera de la caja solución es añadir el campo a sus ModelAdmin 's raw_id_fields - entonces obtendrá una ventana emergente en la que puede utilizar el incorporado en la búsqueda/filtrado y control de paginación para encontrar y seleccionar el objeto que buscas.

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

1

encontrado una solución muy adecuada, incorporado para esto: usar filter_horizontal en ti de configuración del administrador:

Digamos que tiene School y Student Modelo, con la escuela que tiene una relación ManyToManyField a una larga lista de estudiantes.

# model.py 
class School(models.Model): 
    ... 
    students = models.ManyToManyField(Student) 

Sólo tiene que añadir esto a su SchoolAdmin:

# admin.py 
filter_horizontal = ('student',) 

Usted obtendrá este arreglo! enter image description here

2

Django 2.0 admin tiene autocomplete built in. Ver

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

class ChoiceAdmin(admin.ModelAdmin): 
    autocomplete_fields = ['question'] 
Cuestiones relacionadas