2010-09-01 13 views
9

He añadido filter horizontalDjango Admin + ¿Filtro horizontal?

filter_horizontal = ('blocked_email_notifications',) 

Para mi ModelAdmin, pero sigue haciéndolo como un widget de selección múltiple, en lugar de la versión mejorada Javascript ingenioso. ¿Cómo? ¿Debo agregar algo más?

El modelo de usuario se lo define como

blocked_email_notifications = ManyToManyField('EmailTemplate', blank=True) 

Y la forma tiene que define como

blocked_email_notifications = ModelMultipleChoiceField(queryset=EmailTemplate.objects.order_by('key'), required=False) 

Respuesta

19

Si define el campo en el formulario que necesita para incluir el widget:

from django.contrib.admin.widgets import FilteredSelectMultiple 

blocked_email_notifications = ModelMultipleChoiceField(
    queryset=EmailTemplate.objects.order_by('key'), 
    required=False, 
    widget=FilteredSelectMultiple(
     verbose_name=EmailTemplate._meta.verbose_name, 
     is_stacked=False)) 

is_stacked:

  • False: las listas se prestan al lado del otro
  • True: las listas se vuelven una debajo de la otra
+6

Sólo quiero añadir a la respuesta que necesita para pasar una instancia de FilteredSelectMultiple (verbose_name , apilados) en lugar de la clase, por lo que las versiones más recientes de Django no se quejan. –

+0

Espero que esto ayude también http://blog.jayapal.in/2009/08/reuse-django-admin-filteredselectmultip.html – xtreak