Sorry for the late response. Maybe it's sufficient to override the QuerySet clone method to just return self, not really clone it.
2011/2/14 myx <i.virab...@gmail.com> > Thank you for the reply. But I meant a slightly different case: > > Item.objects.filter(...).order_by(...).values_list('id', flat=True)[: > 10] > > As you can see, there are four cloning operations. Wouldn't be > chaining possible without cloning the queryset? The method could just > return the original queryset. Seems like I'll have to write raw > queries in such cases :( > > On Feb 11, 1:18 pm, kurvenschubser <malte.engelha...@gmx.net> wrote: > > Hi myx, > > > > cloning is useful for chaining of filters, e.g. > > > User.objects.filter(name="Harry").exclude(lastname="Potter").filter(somethi > ngelse="bla") > > > > But most of the time, I found I can construct querysets using a > > dictionary for collecting the query conditions: > > > > d = {name:"Harry", lastname:"Potter", somethingelse:"bla"} > > User.objects.filter(**d) > > > > For more complex queries, e.g. > > > > if not d: > > return > > > > q0 = Q(**dict(d.popitem())) > > > > for i, (k, v) in enumerate(d.items()): > > qx = Q(**{k:v}) > > if i % 2: > > q0 | qx > > else: > > q0 & qx > > > > User.objects.filter(q0) > > > > On 10 Feb., 10:55, myx <i.virab...@gmail.com> wrote: > > > > > > > > > > > > > > > > > Almost every method of QuerySet clones it. Sometimes it is very > > > ineficcient, for example when querysets are constructed in loops. I > > > have a function, which makes about 20 queries, and its execution time > > > is about 100ms. After profiling the function, I saw that clone() takes > > > most of the time: 70ms. It is called about 60 times, 1ms per call. The > > > queries themselves are very fast (about 15ms for all queries). So > > > constructing the query takes much longer time than executing it. > > > What cloning is needed for? Can I prevent queryset from cloning, or do > > > something else to reduce cpu consumption? > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-users@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.