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

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

Tôi có danh sách ItemSets. Tôi muốn tìm tất cả các đối tượng Item nơi đối tượng Item nằm trong trường M2M "items" trên ít nhất một đối tượng ItemSet.Bộ lọc Django trên giao điểm truy vấn?

Tôi làm cách nào để thực hiện việc này?

P.S. Dưới đây là những gì tôi đã cố gắng, nhưng không có kết quả:

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

Đã xảy ra lỗi? Điều gì đã xảy ra khi bạn thử điều đó? Ngoài ra, từ đâu bạn nhận được danh sách các vật phẩm? Bạn có truy vấn cho họ không? – Paragon

Trả lời

7

Nếu quý vị cần danh sách các tập phổ biến và bạn đã không nhận được chúng từ một truy vấn, hãy thử này:

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) 

Nếu bạn có thể lấy danh sách itemset của bạn bằng cách truy vấn, rút ​​ngắn nó một chút:

itemset_queryset = ItemSet.objects.filter(SOME FILTER HERE) 
items = Item.objects.filter(itemsets__in=itemset_queryset) 
Các vấn đề liên quan