Frage

Ich habe folgendes Modell der Benutzer und ich möchte alle Benutzer erhalten, wie ‚gelb‘, aber nicht wie ‚rot‘.

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

Das funktioniert (alle Benutzer, die mindestens eine Lieblingsfarbe ‚gelb‘ zurückgegeben haben):

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

Aber dies nicht tut, was ich erwartet hatte:

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

Die gleiche Liste der Benutzer zurückgegeben. Ich glaube, dass es Tests sind, wenn eine der Lieblingsfarben sind anders als ‚rot‘ und nicht, wenn die Liste nicht enthält ‚rot‘ überhaupt.

Wie kann ich nur die Ergebnisse filtern, die ein Element enthalten und nicht ein anderer?

War es hilfreich?

Lösung

Sie können nicht das Fehlen eines Elements filtern. Ihre zweite Abfrage sieht für jeden, den das Element ‚gelb‘ in ihrer Liste hat, sowie mindestens ein Element, das nicht ‚rot‘ ist.

Wenn Ihr Satz von Elementen begrenzt ist, möchten Sie vielleicht Ihre Darstellung ändern sind ‚nicht‘ Einträge - zB „gelb“, „nicht blau“, „nicht rot“. Andernfalls müssen Sie die Filterung in Python-Code tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top