2010-09-01 10 views
9

J'ai ajouté filter horizontalDjango Admin + Filtre Horizontal?

filter_horizontal = ('blocked_email_notifications',) 

A mon ModelAdmin, mais il est rendu encore comme un multiple widget de sélection, plutôt que la version améliorée javascript nifty. Comment venir? Ai-je besoin d'ajouter autre chose?

Le modèle utilisateur a elle défini comme

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

Et la forme a elle défini comme

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

Répondre

19

Si vous définissez le champ sous la forme que vous devez inclure le 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: les listes sont rendus côte à côte
  • True: les listes sont rendus l'un sous l'autre
+6

Je veux juste ajouter à la réponse que vous aurez besoin de passer une instance de FilteredSelectMultiple (verbose_name empilés) au lieu de la classe, donc les versions récentes de Django ne se plaignent pas. –

+0

J'espère que cela aide aussi http://blog.jayapal.in/2009/08/reuse-django-admin-filteredselectmultip.html – xtreak