2014-10-17 272 views
1

現在我有一個Django查詢集,我想通過另一個查詢集的結果進行過濾。現在我這樣做的(和它的作品):使用Django中另一個查詢集的結果過濾查詢集

field = 'content_object__pk' 
values = other_queryset.values_list(field, flat=True) 
objects = queryset.filter(pk__in=values) 

其中字段是一個外鍵的pkqueryset的名稱。 ORM足夠聰明,以上是一個查詢。

我正在努力簡化這(即與對象列表進行過濾,他們的自我,而不是明確地說pk):

field = 'content_object' 
objects = queryset & other_queryset.values_list(field, flat=True) 

但這提供了以下錯誤:

AssertionError: Cannot combine queries on two different base models. 

做這種類型的過濾的正確方法是什麼?

回答

-1

你可以在Django鏈查詢...

qs = entry.objects.filter(...).filter(...) 
+0

我明白了,但在這種情況下......中會發生什麼?你可以把'.filer(in = ...)'(我的想法是否定的)。 – 2014-10-17 19:34:23

+0

是的,你可以把Person.objects.filter(name =「michael」).filter(lastname =「riemann」) – michaelwayman 2014-10-18 05:22:04

+0

這些都是帶有字符串過濾器的例子。它不回答如何使用查詢集。 – 2014-10-18 14:36:07

2

你可以做下:

result = MyModel.objects.filter(field__in=other_query) 

結果將在模型中的對象,其中字段是一個外鍵在other_query中的模型