@blackbb

Как отфильтровать объект по ManyToManyField?

order = Order.objects.get(id = order_id)
master_list = Master.objects.filter(work = order.work.all())

У Order и Master есть поле "work", оно ManyToManyField. Допустим в "order" сейчас поле work содержит (штукатурка, побелка). Как отфильтровать мастеров так, чтобы показывались только мастера, которые содержат в поле "work" и штукатурку и побелку. Сейчас показываются мастера, которые содержат или штукатурку или побелку.
  • Вопрос задан
  • 270 просмотров
Решения вопроса 1
lxsmkv
@lxsmkv
Test automation engineer
master1 = ["s", "p", "c"]
master2 = ["d", "a", "s"]
master3 = ["p", "c", "a"]
k = ["s","p"] # критерии которые все должны содержаться в списке
print filter(lambda m:len(set(m) - set(k)) == len(m)-len(k), [master1, master2, master3])

вернет только значение master1
Смысл такой:
если после вычета элементов k из m длина m станет на len(k) меньше, значит нам удалось вычесть все элементы, а значит они все содержались в m.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы