Как фильтровать () по разным предметам? - PullRequest
0 голосов
/ 28 января 2011

Это продолжение моего предыдущего вопроса .

Я использую ту же модель

class Item(db.Model):
    ...   
    glam = db.StringProperty()
    casual = db.StringProperty()
    speaking = db.StringProperty()

и предполагаю, что у меня 2 предмета, а 1помеченный "glam", другой помеченный "говорящий".

Если я фильтрую таким образом

    query.filter("glam", "glam")
    query.filter("speaking"), "speaking")

, фильтр не возвращает ничего, потому что это ищет 1 элемент с тегами "глэм" и "говорящий".

Как отфильтровать отдельные элементы?

Обновление

Item таблица может выглядеть так:

         glam    speaking
        -------------------
item1
item2    glam
item3            speaking
item4
item5    glam

Я бы хотел отфильтровать "глэм" и "говорение"

1 Ответ

1 голос
/ 28 января 2011

С вашей текущей схемой и текущим API хранилища данных вы не можете достичь этого одним запросом.

Если 'glam', 'casual' и 'speech' являются взаимоисключающими, вы можете использовать IN запрос по одному полю:

class Item(db.Model):
   ...
   tag = db.StringProperty()

query.filter("tag IN", ["glam", "speaking"])

Вы также можете использовать экспериментальный Datastore Plus API и выполнить запрос ИЛИ (который реализуется путем внутреннего объединения результатов двух запросов).:

# Note: Your model must be a Datastore Plus model; this may require some restructuring!
q1 = query.filter("glam =", "glam")
q2 = query.filter("speaking =", "speaking")
for result in q1.OR(q2):
    ....

Обратите внимание, что API datastore plus все еще находится в разработке, поэтому я не уверен, что эти запросы выполняются параллельно , но пока , но в конечном итоге они должны быть выполнены.Кроме того, поскольку API Datastore Plus все еще находится в стадии эксперимента и находится в стадии разработки, вам может потребоваться изменить код в ответ на изменение API.Вы можете контролировать, когда эти обновления происходят, хотя бы.

...