144 votes

Trier par type de biens

Est-il possible de filtrer par propriété?

J'ai une méthode dans mon modèle:

 @property
def myproperty(self):
    [..]
 

et maintenant je veux filtrer par cette propriété comme:

 MyModel.objects.filter(myproperty=[..])
 

est-ce possible?

117voto

Glenn Maynard Points 24451

Nan. Les filtres Django fonctionnent au niveau de la base de données, générant du SQL. Pour filtrer en fonction des propriétés Python, vous devez charger l'objet dans Python pour évaluer la propriété. À ce stade, vous avez déjà effectué tout le travail nécessaire pour le charger.

58voto

Clint Points 2321

Je suis peut-être un malentendu votre question de départ, mais il y a un filtre intégré en python.

filtered = filter(myproperty, MyModel.objects)

Mais il est préférable d'utiliser une compréhension de liste:

filtered = [x for x in MyModel.objects if x.myproperty()]

ou encore mieux, un générateur d'expression:

filtered = (x for x in MyModel.objects if x.myproperty())

1voto

FSp Points 153

Je sais que c’est une vieille question, mais pour ceux qui sautent ici, je pense qu’il est utile de lire la question ci-dessous et la réponse relative:

Comment personnaliser le filtre administrateur dans Django 1.4

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X