Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 24, 2008 11:23:02

offline
От:
Зарегистрирован: 2007-04-24
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

Many2Many

Столкнулся с проблемой, есть продукт, привязаный с помощью 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 у строчек разные..


Как быть?



Офлайн

#2 Фев. 24, 2008 13:37:10

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Many2Many

products1 = Product.objects.filter( Q( category=category1 ) | Q(category=category2) )
так не работеат?
PS: почему игнорируешь тег ?



Офлайн

#3 Фев. 24, 2008 13:52:59

offline
От:
Зарегистрирован: 2007-04-24
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

Many2Many

Нет, так он выбирает все продукты которые входят в одну из двух категорий, а мне надо в две.



Офлайн

#4 Фев. 24, 2008 15:40:40

offline
От:
Зарегистрирован: 2007-04-24
Сообщения: 121
Репутация: +  0  -
Профиль   Отправить e-mail  

Many2Many

Вроде сделал, но через попу явно..

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))
На стиль кодинга не смотрите, это не я, это Satchmo ))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version