如何筛选不包含项目的StringListProperty?

时间:2009-12-13 13:04:10

标签: google-app-engine gql gqlquery

我有以下用户模型,我想让所有喜欢'黄色'的用户,但不喜欢'红色'。

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'")

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

如何仅过滤包含项目而不是其他项目的结果?

1 个答案:

答案 0 :(得分:1)

您无法过滤缺少商品。您的第二个查询会查找列表中包含“黄色”项目的所有人,以及至少一个非“红色”项目。

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