2009-08-12 69 views
0

如何做长时间查询?有没有办法优化它? 我会做复杂和长期的查询:真的很长的查询

all_accepted_parts = acceptedFragment.objects.filter(fragmentID = fragment.objects.filter(categories = fragmentCategory.objects.filter(id=1))) 

,但它不工作,我得到:

Error binding parameter 0 - probably unsupported type. 

我会感谢任何提示我怎么能进行优化或太粗的解决 - 更多感谢:)

+0

当然,所有型号的filelds是正确的 – IProblemFactory 2009-08-12 21:45:01

+2

你的主要问题是可能的过滤器()返回一个QuerySet,这实际上是对象的列表。尝试“categories__in = fragmentCategory ... etc”。像这样的嵌套查询几乎不需要,如果您的模型正确相关。如果您可以自己发布模型定义,我们可以帮助您优化查询。 – 2009-08-12 22:01:03

+0

@Jarret哈迪,也许你应该做出答案。 – 2009-08-12 22:05:15

回答

4

如果它不工作,你不能优化它。首先让它工作。

乍一看,你似乎对领域,关系和平等/成员身份有着复杂的概念。首先去思考文档,并在python shell上逐个构建您的查询(可能从内到外)。

只是瞎猜:

all_accepted_parts = acceptedFragment.objects.filter(fragment__in = fragment.objects.filter(categories = fragmentCategory.objects.get(id=1))) 

或可能:

all_accepted_parts = acceptedFragment.objects.filter(fragment__in = fragment.objects.filter(categories = 1)) 
+0

fragmentID__in(...)作品,thx :) – IProblemFactory 2009-08-12 23:02:20

4

正如其他人所说,我们真正需要的车型,和你实际上想一些解释实现。

但它看起来像你想做一个相关的表查找。而不是在一个单独的嵌套查询中获取所有相关对象,您应该使用Django的相关模型语法在查询中进行连接。

喜欢的东西:

acceptedFragment.objects.filter(fragment__categories__id = 1) 
+0

哇我不知道那很酷的语法,thx;> – IProblemFactory 2009-08-12 23:01:19