Comment filtrer contre un StringListProperty qui ne contient pas un article?
-
19-09-2019 - |
Question
Je le modèle suivant des utilisateurs et je veux tous les utilisateurs comme « jaune », mais ne pas comme « rouge ».
class User(db.Model):
name = db.StringProperty(required=True)
favorite_colors = db.StringListProperty(required=True)
Cela fonctionne (tous les utilisateurs qui ont au moins une couleur préférée « jaune » sont de retour):
results = db.GqlQuery(
"SELECT * FROM User "
"WHERE favorite_colors = 'yellow'")
Mais cela ne fait pas ce que je pensais:
results = db.GqlQuery(
"SELECT * FROM User "
"WHERE favorite_colors = 'yellow' "
"and favorite_colors != 'red'")
La même liste des utilisateurs est retourné. Je crois qu'il teste si l'une des couleurs préférées sont différentes de « rouges » et pas si la liste ne contient pas « rouge » du tout.
Comment puis-je filtrer uniquement les résultats qui contiennent un élément et pas un autre?
La solution
Vous ne pouvez pas filtrer l'absence d'un élément. Votre deuxième requête ressemble à tout le monde qui a l'élément « jaune » dans leur liste, ainsi que d'au moins un élément qui est pas « rouge ».
Si votre ensemble d'articles est limité, vous voudrez peut-être changer votre représentation pour inclure « non » entrées - par exemple, « jaune », « pas bleu », « pas rouge ». Dans le cas contraire, vous devrez faire le filtrage dans le code Python.