Il existe plusieurs solutions qui viennent à l'esprit:
définissent ce queryset à utiliser pour la liste des modifications avec ModelAdmin.queryset().
installez 2 gestionnaires sur votre modèle, le premier que admin trouve sera utilisé par défaut AFAIK.
class SomeThing(models.Model):
objects = models.Manager()
shares = ShareManager()
ajouter une nouvelle méthode sur votre gestionnaire personnalisé qui renvoie des choses seulement active et laisser get_query_set
comme il est par défaut.
class ShareManager(models.Manager):
def get_active_items(self):
return self.get_query_set().filter(active=True)
Suivi
Je pense que la solution la plus appropriée dans votre cas serait de combiner # 1 et # 2 de variation. Définissez votre gestionnaire personnalisé comme objects
afin que tout le monde puisse y accéder (je pense que cela devrait fonctionner pour votre problème de réutilisabilité) et également installer le gestionnaire par défaut sur votre modèle et l'utiliser dans ModelAdmin.queryset()
.
class SomeThing(models.Model):
objects = ShareManager()
admin_objects = models.Manager()
J'ai inclus ModelAdmin.queryset()
exemple de la méthode aussi, si elle est ici.
def queryset(self, request):
qs = self.model.admin_objects.get_query_set()
# TODO: this should be handled by some parameter to the ChangeList.
# otherwise we might try to *None, which is bad ;)
ordering = self.ordering or()
if ordering:
qs = qs.order_by(*ordering)
return qs
Notez la ligne qs = self.model.admin_objects.get_query_set()
travaille avec admin_objects
qui est l'instance de gestionnaire simple et comprend des éléments inédits.
Le reste de cette implémentation de la méthode queryset
est l'implémentation par défaut de Django qui appelle généralement qs = self.model._default_manager.get_query_set()
. J'espère que cela éclaircira un peu les choses.
Merci pour les solutions multiples, cela m'aide à mieux comprendre. Quelques questions: Pour le numéro 1, comment puis-je obtenir tous les objets en tant que jeu de requête si je laisse le gestionnaire personnalisé en place? # 2 et # 3 fonctionnent également, mais je rencontre des problèmes lorsque j'utilise des applications réutilisables comme queryset = TaggedItem.objects.get_by_model (Partager, tag). – knuckfubuck
J'ai oublié de mettre un exemple de méthode 'queryset'. –
Nous vous remercions de votre suivi. La combinaison fonctionne très bien. – knuckfubuck