thanks for the exhausting answer! I thought that something similar is going on under the hood, and just wanted to point it out to other ignorant people like myself.
thanks once again! V On Aug 23, 12:27 pm, "James Bennett" <[EMAIL PROTECTED]> wrote: > On Sat, Aug 23, 2008 at 3:57 AM, Viktor Nagy <[EMAIL PROTECTED]> wrote: > > is this true or both my test and real code are simply wrong? I was > > kinda shocked from this > > The problem here is basically conceptual. You've assumed that, because > it supports some of the same operations as a list, a QuerySet must > *be* a list -- in other words, that it's a container which holds a > collection of objects. > > So while the things you're trying would work with a list (and would > work if you used Python's built-in 'list()' function to turn your > QuerySet's results into a list) because a list is simply a static > collection of objects, they *won't* work on a QuerySet because a > QuerySet is actually a representation of some way you're interacting > with your database, and as a result has to walk some fine lines > between not hitting your DB too often and not giving you stale > results. > > As a general rule, then, whenever you want this sort of behavior, either: > > 1. Use list() to force your QuerySet into a list of objects you can > then work with as a list, or > 2. Pull out the object or objects you want, and store them in a > variable, because there are situations (like this one) where the > QuerySet won't automatically "remember" them for you. > > The slightly longer technical answer, if you're interested, is that > what you're trying will, sort of by accident, work *if and only if* > you've already done something which forced the QuerySet to evaluate, > perform its query and populate its internal result list. If that > hasn't happened yet, repeatedly slicing or indexing into the QuerySet > will result in a new query being run each time you do this, with no > "remembering" of previously-returned results. > > -- > "Bureaucrat Conrad, you are technically correct -- the best kind of correct." --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---

