Немного поработав с хранилищем данных GAE, я обнаружил, что не могу придумать правильный способ отфильтровать результаты, используя фильтр неравенства '!=' для многозначного свойства:
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' """)
Проблема в том, что этот запрос возвращает как e1, так и e2, но мне нужен только e2.
Я думаю, это происходит потому, что фильтр неравенства оценивается как ЛЮБОЙ (ИСТИНА, если хотя бы одно значение равно != 'tag2'. Есть способ применить фильтр ко ВСЕМ? (ИСТИНА, если все значения != 'tag2')?
Я знаю, что хранилище данных GAE не является реляционным, но я хотел бы знать, как разумно решать/обдумывать такие запросы.
Спасибо ;)