2

J'essaye de construire une requête qui prend des données de forme et enlève toutes les soumissions None ou " " mais je ne suis pas sûr comment approcher la logique. Voici le code; Parce que c'est le backend d'une page qui permet aux utilisateurs de filtrer, plutôt que de chercher explicitement, certaines données de formulaire sont vides. Cela provoque la requête pour rechercher des résultats où un ou plusieurs formulaires == Aucun. Exemple: L'utilisateur entre 100 dans la forme de puissance et laisse vide RPM et Voltage. La requête ne renvoie aucun résultat même s'il existe des lignes de 100 chevaux car elle recherche des lignes où Horsepower == 100 et RPM et Voltage == None.Supprimer des objets de la requête si aucun ou nul

J'ai essayé d'utiliser filter(None, object) sans succès, et pense que la solution peut être quelque part en utilisant kwargs.

Je sais que j'ai besoin de passer toutes les données de formulaire à quelque chose qui va supprimer None ou Null entrées, puis passez-le sur l'argument final Motor.query.filter_by, je ne sais pas comment.

Répondre

2

Vous pouvez créer un dict avec les données du filtre:

filter_data = {'horsepower': horsepower, 'voltage': voltage, 'rpm': rpm} 

Ensuite, créez un autre dict avec uniquement les touches dont les valeurs existent:

filter_data = {key: value for (key, value) in filter_data.items() 
       if value} 

Et enfin utiliser ce dict comme kwargs à votre requête :

results = Motor.query.filter_by(**filter_data).all() 
+0

Merci! Cela m'a vraiment aidé à le comprendre. J'ai juste du mal à comprendre comment les arguments filter_by() sont capables de comprendre le kwarg et de l'interpréter dans le bon format même si c'est un dict? Est-ce une fonctionnalité de SQLAlchemy, capable de traduire des dictionnaires en modèles et vice versa? – xGlorify

+1

Non, c'est en fait une fonctionnalité Python pour passer des paramètres à une fonction. En savoir plus sur: http://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/ –