2012-05-06 21 views
5
class Item(models.Model): 
    ... 

class ItemSet(models.Model): 
    items = models.ManyToManyField(Item, related_name="itemsets") 

Öğelerim'in bir listesi var. Item nesnesinin ItemSet nesnelerinden en az birinde "items" M2M alanında yer aldığı tüm Item nesnelerini bulmak istiyorum.Sorgulama kesişiminde Django filtresi var mı?

Bunu nasıl yapabilirim?

P.S. İşte ne denedim, ama boşuna:

itemset_list = [itemset1, itemset2, itemset3] 
itemset_list_ids = [itemset.id for itemset in itemset_list] 
itemset_queryset = ItemSet.objects.filter(id__in=itemset_list_ids) 
items = Item.objects.filter(itemsets__in=itemset_queryset) 

Eğer yapabiliyorsanız: Eğer itemsets listenizi ihtiyaç ve bir sorgudan onları almak olmadıysa

itemset_list = [itemset1, itemset2, itemset3]  
items = Item.objects.filter(itemsets__in=itemset_list) 
+1

Hata oluştu mu? Bunu denediğinde ne oldu? Ayrıca, eşyaların listesini nereden alıyorsun? Onlar için sorguladın mı? – Paragon

cevap

7

, bu deneyin sorgulama yaparak itemset listenizi alın, bu biraz kısaltır:

itemset_queryset = ItemSet.objects.filter(SOME FILTER HERE) 
items = Item.objects.filter(itemsets__in=itemset_queryset)