Question

Bricoler un peu avec le datastore GAE j'ai trouvé que je ne peux pas penser une bonne façon de filtrent les résultats en utilisant le filtre de l'inégalité « =! » Sur une propriété à plusieurs valeurs:

class Entry(db.Model):
    ...
    tags = db.StringListProperty()

e1 = Entry()
e2 = Entry()
e1.tags = ['tag1', 'tag2', 'tag3']
e2.tags = ['tag1', 'tag3', 'tag4']

# I want to exclude all the results containing 'tag2'
db.GqlQuery("""SELECT * FROM Entry 
               WHERE tags != 'tag2' """)

Le problème est que cette requête renvoie à la fois e1 et e2 mais je veux seulement e2 .

Je pense que cela se produit parce que le filtre d'inégalité est évaluée comme ANY (VRAI si au moins une valeur est! = « Tag2 ». Il y a un moyen d'appliquer le filtre à tous? (TRUE si toutes les valeurs sont! = « Tag2 « )?

Je sais que datastore GAE n'est pas relationnel mais je voudrais savoir comment résoudre intelligemment / que ce genre de requêtes.

Merci;)

Était-ce utile?

La solution

J'ai pensé à ce groupe un et je ne pense pas qu'il y ait une bonne façon de le faire (s'il vous plaît me corriger si je me trompe). Ma solution non-intelligente est de ne pas utiliser StringListProperty et en cascade un tas de filtres:

class Entry(db.Model):
  ...
  tag_1 = db.StringProperty();
  tag_2 = db.StringProperty();
  ...
Entry.all().filter('tag_1 !=', tag).filter('tag_2 !=', tag) ...

Je ne vais pas commencer à décrire les problèmes évidents avec cette solution, mais au moins il fait ce que vous voulez.

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