Pergunta

Eu tenho o seguinte modelo de Usuários e quero obter todos os usuários que gostam de 'amarelo', mas não gosto 'vermelho'.

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

Isso funciona (todos os usuários que têm pelo menos uma cor favorita 'amarelo' são retornados):

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

Mas isso não faz o que eu esperava:

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

A mesma lista de usuários é retornado. Eu acredito que ele está testando se qualquer uma das cores favoritas são diferentes de 'vermelho' e não se a lista não contém 'vermelho' em tudo.

Como posso filtrar apenas os resultados que contêm um item e não outro?

Foi útil?

Solução

Não é possível filtrar para a ausência de um item. Sua segunda aparência de consulta para todos que tem o item 'amarelo' em sua lista, bem como pelo menos um item que não é 'vermelho'.

Se o seu conjunto de itens é limitada, você pode querer mudar a sua representação para incluir 'não' entradas - por exemplo, "amarelo", "não azul", "não vermelho". Caso contrário, você vai precisar fazer a filtragem em código Python.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top