Как фильтровать StringListProperty, который не содержит элемента?

StackOverflow https://stackoverflow.com/questions/1896452

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня есть следующая модель пользователей, и я хочу получить всех пользователей, которым нравится «желтый», но не нравится «красный».

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

Это работает (возвращаются все пользователи, у которых есть хотя бы один любимый цвет «желтый»):

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

Но это не делает то, что я ожидал:

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

Возвращается тот же список пользователей.Я считаю, что он проверяет, отличается ли какой-либо из любимых цветов от «красного», а не проверяется, не содержит ли список вообще «красный».

Как я могу фильтровать только те результаты, которые содержат один элемент, а не другой?

Это было полезно?

Решение

Вы не можете фильтровать отсутствие элемента.Ваш второй запрос ищет всех, у кого в списке есть элемент «желтый», а также хотя бы один элемент, который не является «красным».

Если ваш набор элементов ограничен, вы можете изменить свое представление, включив в него записи «не» - например, «желтый», «не синий», «не красный».В противном случае вам придется выполнить фильтрацию в коде Python.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top