2011-01-28 34 views
0

这是跟我的previous question如何筛选()不同的项目?

我使用的是相同的模型

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

,并假设我有2个项目和1个被标记“华丽”的其他标记的“说”。

如果我筛选这样

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

过滤器返回没有,因为这看起来对1个项目标记为“华丽”和“说”。

如何过滤单独的物品?

更新

Item表可能是这样的:

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

我想过滤 “华丽” 和 “说”

回答

1

根据您目前的架构和当前的数据存储API,您无法通过单个查询实现此目的。

如果“华丽”,“散”和“说”是相互排斥的,您可以使用IN查询上单场:

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

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

你也可以使用实验Datastore Plus API并作出OR查询(这是由内部合并两个查询的结果执行):

# 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仍处于试验阶段并处于开发阶段,因此您可能需要更改代码以响应API流量。至少,您可以控制何时发生这些更新。

+0

感谢您的回答。此时我不想使用实验性Datastore Plus API。那么,在数据存储中处理`图像标记'的最好方法是什么?我应该改变我的模式并使用'一对多'关系吗? – Zeynel 2011-01-28 15:46:35

相关问题