Django фильтрует объекты на основе значений списка - PullRequest
0 голосов
/ 29 мая 2018

У меня есть listTextField в моем модале под названием technology.Я хочу фильтровать объекты на основе массива, если каждое значение массива присутствует в поле technology.

tech = ['a','b',....] #dynamic list
mentors_list = Mentor.objects.filter(
            **{"technology__contains" : value for value in tech}) #this doesn't work

Класс Mentor имеет (среди других полей):

class Mentor(Meta):
    technology = ListTextField(
        base_field=models.CharField(max_length=20),
        size=10, max_length=(10 * 11))

По сути, я хочу, чтобы все объекты в mentor_list, чье поле technology должно содержать все значения из массива tech (но могут содержать некоторые дополнительные значения).

1 Ответ

0 голосов
/ 29 мая 2018

Из documentation Вы можете связать Q объект с & для проверки нескольких записей, содержащихся в ListTextField.

from functools import reduce 

technologies = ['a','b'] # your dynamic list

queries = [Q(technology__contains=technology) for technology in technologies]

query = reduce(lambda x, y: x & y, queries)

mentors_list = Mentor.objects.filter(query) 

Ссылка: Как динамически создать фильтр запросов OR в Django?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...