Comment remplacer le queryset donnant les filtres dans list_filter?
Donné les modèles suivants
class AnotherModel(models.Model):
n = models.IntegerField()
class MyModel(models.Model):
somefield = models.ForeignKey(AnotherModel)
et admin
class MyModelAdmin(admin.ModelAdmin):
list_filter = ('somefield',)
comment puis-je filtrer les instances de AnotherModel
pour afficher uniquement ceux avec un n
valeur dans mon admin filtre?
J'ai besoin de quelque chose comme:
Filtre
Par somefield
tous
[liste des AnotherModel cas donné, avec n]
source d'informationauteur jul
Vous devez vous connecter pour publier un commentaire.
Voir ModelAdmin.queryset et ModelAdmin.formfield_for_foreignkey. À partir de la documentation:
[mise à jour]
Désolé, je n'ai pas réussi à lire le "filtre" de la partie. Dans Django >= 1.4, vous pouvez passer une sous-classe de
django.contrib.admin.SimpleListFilter
dans le list_filter liste d'argumentsque vous pouvez utiliser afin de remplacer les recherches et queryset méthodes.Edition - cette méthode a été signalé à avoir des problèmes, voir ci-dessous
Vous pouvez le faire comme ceci:
Disons que vous avez un modèle Animal, qui a un champ ForeignKey à un modèle appelé Espèces. Dans un admin de la liste, vous souhaitez autoriser uniquement certaines espèces à être montré dans les animaux de filtre de choix.
Tout d'abord, créez-en un ListFilter appelé SpeciesFilter de l'Animal ModelAdmin:
Ensuite définir le SpeciesFilter:
Cela devrait le faire.
J'ai dû créer mon champs de recherche, à partir de la table db. J'ai créé un filtre de classe comme ci-dessous et d'afficher uniquement les valeurs liées à l'utilisateur connecté et filtre en conséquence:
Pour plus de visite Obtenir les la plupart hors de Django Admin filtres