Domanda

Ho il seguente modello di Utenti e voglio ottenere tutti gli utenti che, come 'giallo', ma non mi piace 'rosso'.

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

Questo funziona (tutti gli utenti che hanno almeno un colore preferito 'giallo' vengono restituiti):

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

Ma questo non fa quello che mi aspettavo:

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

Lo stesso elenco di utenti viene restituito. Credo che sia il test se uno dei colori preferiti sono diversi da 'rosso' e non se la lista non contiene 'rosso' a tutti.

Come faccio a filtrare solo i risultati che contengono un elemento e non un altro?

È stato utile?

Soluzione

Non è possibile filtrare per l'assenza di un elemento. La tua seconda query cerca a tutti che ha la voce di 'giallo' nella loro lista, così come almeno un elemento che non è 'rosso'.

Se il set di elementi è limitata, si consiglia di modificare la rappresentazione per includere 'non e' voci - ad esempio, "giallo", "non blu", "non rosso". In caso contrario, sarà necessario fare il filtraggio in codice Python.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top