这是对我previous question的跟进。
我使用相同型号
class Item(db.Model):
...
glam = db.StringProperty()
casual = db.StringProperty()
speaking = db.StringProperty()
并假设我有2个项目,1个被标记为“glam”,另一个标记为“发言”。
如果我像这样过滤
query.filter("glam", "glam")
query.filter("speaking"), "speaking")
过滤器返回none,因为这会查找标记为“glam”和“speak”的1个项目。
如何过滤单独的商品?
更新
Item
表可能如下所示:
glam speaking
-------------------
item1
item2 glam
item3 speaking
item4
item5 glam
我想过滤“华丽”和“说话”
答案 0 :(得分:1)
使用当前架构和当前数据存储API,您无法通过单个查询实现此目的。
如果'glam','casual'和'speak'是互斥的,您可以在单个字段上使用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流量。你可以控制何时发生这些更新,至少。