2011-12-01 30 views

回答

1

你可以调用values

Entry.objects.filter(is_admin=True).values_list('id', flat=True).order_by('id') 
+0

我有一个querset = [obj1,ob2,ob3 ...]。我怎样才能过滤这个查询集。我不想做一个新的数据库调用。其实我正在传递查询集到一个函数。那些查询集可能来自不同的模型。但是我的功能是通用的。 – user426795

+0

以前是否对查询集进行了评估?如果没有,你实际上并没有击中数据库,所以继续这样做吧。而且,你可能会陷入过早的优化,当你需要一组特定的项目时,可以点击数据库。 –

+0

好的谢谢你的提示。但我有一个采用queryset的函数。我将一个评估的查询集传递给它。根据不同的参数进行评估。但是,这样的函数在不同的情况下会采用不同的查询集。但实际上,该函数在基于is_admin = True – user426795

1

我们的目标是设计您的应用程序,这样的查询集未评估的最后一个过滤器是由你的函数应用后,直到前筛选查询集。

qs = Entry.objects.filter(...whatever...) 
qs = qs.exclude(...whatever...) 
qs = qs.filter(...something_else...) 
# qs is not evaluated yet 

def my_func(some_qs): 
    return some_qs.filter(is_admin=True) 

qs = my_func(qs) 
# qs is still not evaluated yet 

,如果你没有选择,而不是过滤已经评估查询集,然后要知道你可以把它像任何其他的迭代,如使用内置过滤功能就像一个列表:

admins = filter(lambda x: x.is_admin, my_evaluated_qs) 
相关问题