1

次のモデルのユーザーがあり、「黄色」が好きで「赤」が好きではないすべてのユーザーを取得したいと考えています。

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

これは機能します (少なくとも 1 つのお気に入りの色「黄色」を持つすべてのユーザーが返されます)。

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

アイテムがないことをフィルター処理することはできません。2 番目のクエリは、リストに「黄色」のアイテムが含まれるすべてのユーザーと、「赤」以外のアイテムが少なくとも 1 つあるユーザーを探します。

アイテムのセットが限られている場合は、「黄色」、「青色でない」、「赤色でない」などの「ない」エントリを含めるように表現を変更することができます。それ以外の場合は、Python コードでフィルタリングを行う必要があります。

于 2009-12-13T16:19:36.597 に答える