Come filtrare contro uno StringListProperty che non contiene un articolo?
-
19-09-2019 - |
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?
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.