2009-02-24 4 views
3

J'ai un modèle Django contenant un champ de texte. Dans l'interface graphique d'administration, j'aimerais pouvoir filtrer uniquement les enregistrements contenant du texte dans ce champ. C'est possible? Code quelque chose comme ceci va filtrer sur le contenu du champ de texte, mais montre des filtres sur «Tous» et chaque entrée distincte dans le filtre. J'aimerais filtrer 'Tout' ou 'Contient quelque chose'.L'interface graphique d'administration de Django peut-elle filtrer si un champ de texte est vide?

class MyModel(models.Model): 
    # ... 
    textfield = models.CharField(max_length=100) 
    # ... 

class MyModelAdmin(admin.ModelAdmin): 
    list_display = ('...', 'textfield', '...') 
    list_filter = ('...', 'textfield', '...') 
+0

double possible de [Filtrage Django par admin Null/n'est pas nul] (http://stackoverflow.com/questions/7691890/filtering-django-admin-by-null-is -not-null) – Chronial

Répondre

6

Oui, mais ce n'est pas documenté. Regardez django\contrib\admin\filterspecs.py pour voir comment les filterspecs par défaut sont créés et comment vous pouvez créer les vôtres. Cette fonctionnalité est prévue pour la version 1.1, et il y a déjà un correctif si vous voulez essayer la fonctionnalité maintenant sur la dernière révision HEAD: http://code.djangoproject.com/ticket/5833

Egalement pas documenté est le fait que vous pouvez mettre des paramètres arbitraires GET sur l'URL de votre change_list page pour filtrer les résultats. Par exemple /admin/app/model/?field1__lte=5&field2__gte=10 Malheureusement, ?field__isnull=True ne fonctionnera pas, mais vous pouvez facilement expérimenter pour voir si vous pourriez trouver un filtre qui fonctionnerait dans votre cas.

-2

No. Voir http://docs.djangoproject.com/en/dev/ref/contrib/admin/#list-filter

Set list_filter pour activer les filtres dans la barre latérale droite de la liste des modifications page de l'administrateur. Cela devrait être une liste de noms de champs , et chaque champ spécifié doit être un champ BooleanField , CharField, DateField, DateTimeField, IntegerField ou ForeignKey.

Mais ...

Deux choses.

  1. Assurez-vous de laisser vide pour votre champ de texte.

    MyModel classe (models.Model): # ... textfield = models.CharField (max_length = 100, vide = true) # ...

  2. Ajouter une méthode is_blank pour aider au traitement . Cela ne filtre pas, mais c'est utile.

    def is_blank (auto): retour len (self.textfield) == 0

Questions connexes