2010-01-13 1 views
0

Je configure une nouvelle application Django et dois personnaliser l'Admin pour une table donnée en restreignant les enregistrements où un champ est NULL. Fondamentalement, un filtre permanent intégré.Liste de modifications de l'administrateur de Django - restriction où champ est vide

On dirait que changelist_view doit être remplacé, mais je ne sais pas à quoi ressemblerait ce changement.

Il n'y a pas de code à inclure car je ne remplace pas changelist_view dès maintenant.

Répondre

1

Vous pouvez remplacer gestionnaire par défaut, mais il a un inconvénient que vous devrez spécifier explicitement gestionnaire d'origine dans toutes vos requêtes:

class MyManager(models.Manager): 
    def get_query_set(self): 
     return super(MyManager, self).get_query_set().filter(my_field__isnull=False) 

class MyModel(models.Model): 
    objects = MyManager() 
    all_objects = models.Manager() 

MyModel.all_objects.all() # all objects including those having my_field=None 
+0

Merci Antony. Cet exemple s'applique à TOUS les objets, correct? MyManager et MyModel supprimeraient toutes les requêtes avec ce filtre? – jro

+0

L'administrateur django utilise le gestionnaire lié à '.objects'. Vous pouvez utiliser n'importe quel gestionnaire que vous aimez (soit 'objects' ou' all_objects'). Dans certains cas (comme la recherche "reverse") 'objects' est utilisé automatiquement dans vos requêtes, donc si vous utilisez souvent ce modèle dans votre code, recherchez une autre solution. Celui-ci ressemble plus à un quickfix. –

+0

Merci Antony. Je vais écrire ma propre page d'administration à la place. – jro

1

Il n'y a pas vraiment une bonne façon de le faire à l'heure actuelle - il est en fait un ticket ouvert sur Django demandant la possibilité de personnaliser ce que QuerySet est utilisé pour les vues d'administration - voir ticket #10761. Antony's solution fonctionnera à court terme, mais vous devrez peut-être attendre jusqu'à ce que le ticket soit résolu pour une solution appropriée.

+0

Merci Dominic. – jro

0

J'ai décidé d'utiliser un gestionnaire de jeu de requête limité en tant qu'objets. Pour ModelAdmin, j'ai copié queryset() depuis django/contrib/admin/options.py et changé _default_manager par le gestionnaire de queryset illimité. Simple!

Questions connexes