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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top