Querysets definitely support indexing. Alex
On Thu, May 16, 2013 at 2:51 PM, Alex Ogier <[email protected]> wrote: > QuerySets don't support indexing. I'm not entirely sure why, but I > think the reason is to encourage more efficient database usage, since > naive usage of indexing would lead to many repeated LIMIT 1 OFFSET N > type queries. Forcing people to slice first encourages them to think > about exactly how many results they need and evaluate them all at > once. > > On Thu, May 16, 2013 at 11:06 AM, Lee Trout <[email protected]> wrote: > > Let me clarify that I would expect both qs[:1][0] and qs[0] to raise > > IndexError if there were no results. > > > > > > > > On Thu, May 16, 2013 at 11:05 AM, Lee Trout <[email protected]> wrote: > >> > >> That's what I thought- But why not just qs[0]? > >> > >> Doesn't qs[:1] and qs[0] both cause a LIMIT 1 on the query? It seems > that > >> the [:1] is unnecessary. I would expect both to raise IndexError. > >> > >> > >> > >> On Wed, May 15, 2013 at 11:39 PM, Alex Ogier <[email protected]> > wrote: > >>> > >>> Significantly better. The latter method loads every single model in the > >>> queryset into Python, potentially the whole database! > >>> > >>> On May 15, 2013 9:24 PM, "Lee Trout" <[email protected]> wrote: > >>>> > >>>> Is qs[:1][0] better form than list(qs)[0]? > >>>> > >>>> > >>>> On Wed, May 15, 2013 at 7:48 AM, Selwin Ong <[email protected]> > >>>> wrote: > >>>>> > >>>>> I've updated the first() and last() to not accept any arguments. > Please > >>>>> review it and let me know if there's anything else I need to change. > >>>>> Hopefully this can get merged in during the sprints and make it into > 1.6 :). > >>>>> > >>>>> The pull request is here: https://github.com/django/django/pull/1056 > >>>>> > >>>>> Best, > >>>>> Selwin > >>>>> > >>>>> On Monday, May 13, 2013 8:12:35 PM UTC+7, Michal Petrucha wrote: > >>>>>> > >>>>>> > > I initially modeled "first()" and "last()"'s behaviors to mimic > >>>>>> > > "latest()", but in this new pull request, you can pass multiple > >>>>>> > > field names > >>>>>> > > into "first()" and "last()" so it behaves like "order_by()". > It's > >>>>>> > > more > >>>>>> > > flexible and requires less typing, but I wonder if we should > just > >>>>>> > > get rid > >>>>>> > > of the optional field arguments and rely on "order_by" for > >>>>>> > > ordering. "There > >>>>>> > > should be one-- and preferably only one --obvious way to do it". > >>>>>> > > >>>>>> > Considering "There should be one-- and preferably only one > --obvious > >>>>>> > way to > >>>>>> > do it", I definitely prefer to rely on order_by to do the > ordering, > >>>>>> > not on > >>>>>> > first. > >>>>>> > > >>>>>> > .order_by('name').first() > >>>>>> > > >>>>>> > is clear and readable in my opinion. > >>>>>> > >>>>>> My thoughts exactly, we already have one method that does ordering, > I > >>>>>> don't think it is necessary to make these methods incorporate that > >>>>>> functionality. If we did, we might argue that other QuerySet > >>>>>> operations could be supported as well and that would just result in > a > >>>>>> bloated API. Especially if there's no performance gain (the QuerySet > >>>>>> would be cloned anyway), and it only saves a few lines of code. > >>>>>> > >>>>>> Also, skimming through this thread, I think there was a consensus on > >>>>>> first() and last() not taking any ordering arguments, i.e. the first > >>>>>> proposed syntax: > >>>>>> > >>>>>> .filter(last_name__startswith='b').order_by('last_name').first() > >>>>>> > >>>>>> Michal > >>>>> > >>>>> -- > >>>>> You received this message because you are subscribed to the Google > >>>>> Groups "Django developers" group. > >>>>> To unsubscribe from this group and stop receiving emails from it, > send > >>>>> an email to [email protected]. > >>>>> To post to this group, send email to > >>>>> [email protected]. > >>>>> Visit this group at > >>>>> http://groups.google.com/group/django-developers?hl=en. > >>>>> For more options, visit https://groups.google.com/groups/opt_out. > >>>>> > >>>>> > >>>> > >>>> > >>>> -- > >>>> You received this message because you are subscribed to the Google > >>>> Groups "Django developers" group. > >>>> To unsubscribe from this group and stop receiving emails from it, send > >>>> an email to [email protected]. > >>>> To post to this group, send email to > [email protected]. > >>>> Visit this group at > >>>> http://groups.google.com/group/django-developers?hl=en. > >>>> For more options, visit https://groups.google.com/groups/opt_out. > >>>> > >>>> > >>> > >>> -- > >>> You received this message because you are subscribed to the Google > Groups > >>> "Django developers" group. > >>> To unsubscribe from this group and stop receiving emails from it, send > an > >>> email to [email protected]. > >>> To post to this group, send email to > [email protected]. > >>> Visit this group at > >>> http://groups.google.com/group/django-developers?hl=en. > >>> For more options, visit https://groups.google.com/groups/opt_out. > >>> > >>> > >> > >> > > > > -- > > You received this message because you are subscribed to the Google Groups > > "Django developers" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to [email protected]. > > To post to this group, send email to [email protected]. > > Visit this group at > http://groups.google.com/group/django-developers?hl=en. > > For more options, visit https://groups.google.com/groups/opt_out. > > > > > > -- > You received this message because you are subscribed to the Google Groups > "Django developers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/django-developers?hl=en > . > For more options, visit https://groups.google.com/groups/opt_out. > > > -- "I disapprove of what you say, but I will defend to the death your right to say it." -- Evelyn Beatrice Hall (summarizing Voltaire) "The people's good is the highest law." -- Cicero GPG Key fingerprint: 125F 5C67 DFE9 4084 -- You received this message because you are subscribed to the Google Groups "Django developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/django-developers?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
