Форум сайта python.su
Столкнулся с проблемой, есть продукт, привязаный с помощью ManyToMany к категории. Хочу вытащить все продукты которые находятся и в категории Х и в категории У. Но так как ManyToMany хранит каждую связь с продуктом на отдельной строчке, то через Q выбрать не получится как я понял.
Для примера дам вариант который хочу сделать, но он естественно не рабочий иначе я бы не спрашивал ))
category1 = Category.objects.get(slug=brand)
category2 = Category.objects.get(slug=typeof)
products1 = Product.objects.filter(category=category1, category=category2)
Ещё была идея сделать так
category1 = Category.objects.get(slug=brand)
category2 = Category.objects.get(slug=typeof)
products1 = category1.product_set.all()
products2 = category2.product_set.all()
products = set(products1) & set(products2)
но тут тоже не получается, объекты по идее разные потому как id у строчек разные..
Как быть?
Офлайн
products1 = Product.objects.filter( Q( category=category1 ) | Q(category=category2) )
Офлайн
Нет, так он выбирает все продукты которые входят в одну из двух категорий, а мне надо в две.
Офлайн
Вроде сделал, но через попу явно..
def root2(request, slug):
brand, typeof = slug.split("-")
try:
category1 = Category.objects.get(slug=brand)
category2 = Category.objects.get(slug=typeof)
except IndexError:
return bad_or_missing(request, _('The category you have requested does not exist.'))
products1 = Product.objects.filter(category=category1)
products2 = Product.objects.filter(category=category2)
prod = []
for i in products1:
for z in products2:
if i.id == z.id:
prod.append(i)
return render_to_response('base_categories.html', {'products': prod}, RequestContext(request))
Офлайн