Pregunta

Tengo el siguiente modelo de Usuarios y quiero conseguir todos los usuarios que al igual que 'amarilla', pero no le gusta 'rojo'.

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

Esto funciona (todos los usuarios que tienen al menos un color favorito 'amarilla' se devuelven):

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

Pero esto no hace lo que yo esperaba:

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

Se devuelve la misma lista de usuarios. Creo que se trata de probar si cualquiera de los colores preferidos son diferentes de 'rojo' y no si la lista no contiene 'rojo' en absoluto.

¿Cómo puedo filtrar sólo los resultados que contengan un elemento y no otro?

¿Fue útil?

Solución

No puede filtrar por la ausencia de un elemento. Su segunda consulta es para todo el mundo que tiene el tema 'amarillo' en su lista, así como al menos un elemento que no es 'rojo'.

Si el conjunto de artículos es limitada, es posible que desee cambiar su representación para incluir 'no' entradas - por ejemplo, "amarillo", "no azul", "no rojo". De lo contrario, tendrá que hacer el filtrado de código Python.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top