Запрос к базе данных через Django ManyToManyField
-
10-07-2019 - |
Вопрос
Я хотел бы узнать, как выбрать все объекты, чье поле ManyToMany содержит другой объект. У меня есть следующие модели (урезанные)
class Category(models.Model):
pass
class Picture(models.Model):
categories = models.ManyToManyField(Category)
visible = models.BooleanField()
Мне нужна функция, чтобы выбрать все картинки в одной или нескольких категориях:
def pics_in_cats(cat_ids=()):
pass
НО это должно вернуть QuerySet, если это возможно, чтобы я мог сделать что-то вроде:
pics_in_cats((1,2,3)).filter(visible=True)
Это можно сделать, загрузив все соответствующие объекты Category и объединив их атрибуты picture_set, но это кажется неэффективным. Я также хотел бы, по возможности, избежать использования необработанного SQL.
Заранее спасибо
Решение
Зачем писать пользовательскую функцию, а не использовать что-то подобное? (Непроверенные) р>
pics = Picture.objects.filter(categories__in = [1,2,3]).filter(visible=True)
Не связан с StackOverflow