1

我有以下用户模型,我想获得所有喜欢“黄色”但不喜欢“红色”的用户。

class User(db.Model):
    name = db.StringProperty(required=True)
    favorite_colors = db.StringListProperty(required=True)

这有效(返回至少有一种最喜欢的颜色“黄色”的所有用户):

results = db.GqlQuery(
    "SELECT * FROM User "
    "WHERE favorite_colors = 'yellow'")

但这并没有达到我的预期:

results = db.GqlQuery(
    "SELECT * FROM User "
    "WHERE favorite_colors = 'yellow' "
    "and favorite_colors != 'red'")

返回相同的用户列表。我相信它正在测试是否有任何最喜欢的颜色与“红色”不同,而不是如果列表根本不包含“红色”。

如何仅过滤包含一个项目而不包含另一个项目的结果?

4

1 回答 1

1

您无法过滤缺少的项目。您的第二个查询查找列表中包含“黄色”项目的每个人,以及至少一个不是“红色”的项目。

如果您的项目集有限,您可能希望更改您的表示以包含“非”条目 - 例如,“黄色”、“非蓝色”、“非红色”。否则,您需要在 Python 代码中进行过滤。

于 2009-12-13T16:19:36.597 回答