dependent chained javascript django django-admin html-select

javascript - chained - A Better Django Admin ManyToMany Widget de campo



django chained select (3)

En realidad no he jugado con él, pero encontré esta biblioteca de aspecto prometedor a la que se hace referencia en otro lugar.

Parece hacer exactamente lo que yo quería. En lugar de cargar toda la lista de objetos relacionados (¡independientemente de cuántos!) Y presentarle un seleccionador para seleccionar algunos de ellos, como filter_horizontal hace filter_horizontal , presenta un cuadro de búsqueda / filtro y utiliza las llamadas typeahead / autocomplete para recuperar resultados dinámicamente Esto es ideal para el caso en que tenga quizás 5000 usuarios y desee elegir 3 o 4 de ellos sin esperar a que se descarguen y procesen los 5k <option> elementos.

Encuentro que los models.ManyToManyField predeterminados de Django Admin. El widget models.ManyToManyField es engorroso de usar. Es el elemento de selección de HTML y si tienes muchos Objetos del "otro" modelo, entonces no es práctico encontrar los "otros" Objetos que deseas asociar con "este" Objeto. Y si tiene muchos objetos del "otro" modelo, parece que incluso ralentiza la presentación de la página de administración.

Soy consciente de que puedo construir mi propio widget de administración personalizado y aplicarlo a ManyToManyFields como mejor me parezca, pero ¿hay alguno ManyToManyFields que pueda usar en su lugar? En mis sueños, me imagino un widget HTML de entrada de texto autocompletado. ¿Esto es incluso práctico / posible de hacer en el marco de administración de Django?

Gracias.


Intente utilizar el atributo filter_horizontal en su clase de administrador, por ejemplo:

class SomeModelAdmin(admin.ModelAdmin): filter_horizontal = (''users'',)

Como se menciona en la documentación , "agregar un ManyToManyField a esta lista usará en su lugar una interfaz ingeniosa y discreta de" filtro "de JavaScript que permite realizar búsquedas dentro de las opciones". filter_vertical hace lo mismo con un diseño ligeramente diferente.


podrías intentar usar una identificación sin procesar en el administrador. y los documentos de django: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields

Si está buscando algo con autocompletar, puede considerar esto como un punto de partida http://code.djangoproject.com/wiki/AutoCompleteSolutions

y finalmente un ejemplo en línea muy simplista:

models.py

class SomeModel(models.Model): users = models.ManyToMany(User)

admin.py:

class SomeModelAdmin(admin.ModelAdmin): raw_id_fields = ("users",)