Вопрос

Немного возиться с данным 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.

Я думаю, что это происходит потому, что фильтр неравенства оценивается как любая (правда, если хотя бы одно значение!

Я знаю, что хранилище GAE не является реляционным, но я хотел бы знать, как умно решить/думать об этом виде запросов.

Спасибо ;)

Это было полезно?

Решение

Я подумал об этом кучу, и я не думаю, что есть хороший способ сделать это (пожалуйста, поправьте меня, если я ошибаюсь). Мое решение, не предпринимаемое решением, состоит в том, чтобы не использовать StringListProperty и каскаду кучу фильтров:

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

Я не собираюсь описывать очевидные проблемы с этим решением, но, по крайней мере, это делает то, что вы хотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top