2009-10-17 6 views
2

Je construis un site d'article en utilisant django. J'ai ajouté plusieurs à plusieurs entre mes articles de cette façon:Django: Admin, ajoutant de nouveaux filtres à un champ à choix multiples

class Article (models.Model): 
    # Tiny url 
    url = models.CharField(max_length = 30, unique=True) 
    is_published = models.BooleanField() 
    author = models.CharField(max_length = 150) 
    title = models.CharField(max_length = 200) 
    short_description = models.TextField(max_length = 600) 
    body = tinymce_models.HTMLField() 
    related = models.ManyToManyField("self") 

Maintenant, dans mon site admin, je vois boîte de sélection multiple (voir l'image ici http://img.skitch.com/20091017-mfs2mbhbuudk2rgquium1bu61d.png)

Ce que je veux utiliser ce case utilisable pour un utilisateur qui choisira des articles pour les lier à un article courant. Par exemple, y a-t-il un moyen d'ajouter du filtrage? Par exemple. Si je voudrais filtrer tous les articles par section? Et puis rejeter les résultats précédents et filtrer l'ensemble par nom, etc?

Merci à l'avance

+++

Je suis en train d'étudier la possibilité d'ajouter filtre horizontal à admin. Mais après je l'ai ajouté de cette façon:

class ArticleAdmin(admin.ModelAdmin): 
    exclude = ('video',) 

    js = ('/site_media/js/tiny_mce/tiny_mce.js', 
     ) 
    list_display = ('title', 'author', 'section', 'is_published', 'pub_date') 
    list_filter = ('author', 'section', 'is_published', 'pub_date') 
    filter_horizontal = ['related', ] 
    search_fields = ['body', 'title', 'short_description', 'seo_keywords'] 

Tous les articles de admin :(évanoui

+0

Je ne pense pas que ce soit possible dans l'admin, mais j'aimerais bien avoir tort! –

Répondre

0

Si vous regardez pour le filtrage de base, essayez this ou that:

Si vous souhaitez personnaliser le filtrage, vous pourrait en fait faire un petit guide:..

Sous forms.SelectMultiple ou directement le FilteredSelectMultiple existant de django.contrib.admin.widgets et lui faire faire ce que vous voulez

Puis sous-classe ModelAdmin dans votre admin.py et remplacez formfield_for_manytomany (regardez django.contrib.admin.options pour cette méthode) et remplacez le widget existant par votre nouveau.

+0

Je suis à la recherche d'un filtrage de base. Pouvez-vous m'expliquer par exemple comment ajouter le filtre horizontal? J'ai essayé d'ajouter à l'administrateur: classe ArticleAdmin (admin.ModelAdmin): exclude = ('video',) js = ('/site_media/js/tiny_mce/tiny_mce.js', ) list_display = ('title', 'author', 'section', 'is_published', 'pub_date') list_filter = ('auteur', 'section', 'is_published', 'pub_date') filter_horizontal = ('section', 'is_published') Mais toutes mes entrées d'articles ont juste disparu ... Où ajouter le filtre? –

+0

Mis à jour le message principal –

+0

AFAIK filter_horizontal ne fonctionne qu'avec ManyToMany Fields. Les arguments sont juste les champs que vous voulez filtrer et PAS les champs que vous voulez filtrer. Donc dans votre cas, c'est juste filter_horizontal = ('related',). Comme je l'ai souligné, c'est juste un filtrage de base, pour un filtrage plus avancé, vous devez écrire vous-même le code. – stefanw

Questions connexes