There is a threaded comments app http://code.google.com/p/django-threadedcomments/ , Now that I think about it, they surely would be doing this conversion from relational to hierarchical format. I will read the code and let you know if I can find something useful.
On Feb 20, 7:10 pm, Evert Rol <[EMAIL PROTECTED]> wrote: > Hi folks, > > I'm somewhat new to Django, happily plodding along creating apps for > a website, when I stumbled upon oddities when slicing QuerySets. I'm > using 0.97pre (checked out from SVN about a month ago) on Mac OS X > 10.4, Python 2.5. > With the following very simply class: > > class Article(models.Model): > text = models.CharField(max_length=100, default='lorem ipsum') > def __unicode__(self): > return self.text > > I can do the following: > >>> from dtest.models import Article > >>> for x in range(1, 5): > ... a = Article(text='article no %d' % x) > ... a.save() > ... > >>> articles = Article.objects.all() > >>> for a in articles: > ... print a > ... > article no 1 > article no 2 > article no 3 > article no 4 > > That all works fine. Things get weird when I slice the QuerySet (I'm > using the id-ing and type-ing to check on the object): > >>> selection = Article.objects.all()[0:3] > >>> print id(selection), type(selection) > 20614928 <class 'django.db.models.query._QuerySet'> > >>> for a in selection: > ... print a > ... > article no 1 > article no 2 > article no 3 > > >>> selection = Article.objects.all()[0:3] > >>> print id(selection), type(selection) > 20627632 <class 'django.db.models.query._QuerySet'> > >>> for i in range(4): > ... print selection[i] > ... > article no 1 > article no 2 > article no 3 > article no 4 > > ??? > This is what I didn't expect: where's the IndexError (or > ObjectNotFound)? > > But if I evaluate the selection before (using len(), to minimize > output; print also works, for example), it does work as I expect: > >>> selection = Article.objects.all()[0:3] > >>> print id(selection), type(selection) > 20615056 <class 'django.db.models.query._QuerySet'> > >>> len(selection) > 3 > >>> print id(selection), type(selection) > 20615056 <class 'django.db.models.query._QuerySet'> > >>> for i in range(4): > ... print selection[i] > ... > article no 1 > article no 2 > article no 3 > Traceback (most recent call last): > File "<console>", line 2, in <module> > File "/sw/lib/python2.5/site-packages/django/db/models/query.py", > line 161, in __getitem__ > return self._result_cache[k] > IndexError: list index out of range > > It obviously has to do with how and when QuerySets are evaluated; it > looks like that before evaluation, the slice hasn't 'worked' yet. The > id() and type() statements suggest it's still completely the same > object though, before and after; nothing has apparently changed. > (In fact, this is the reason I'm not recycling the first articles or > selection QuerySet, but instead do an objects.all() each time; it > gets evaluated in the first for-loop, and when recycled, things work > as I expect). > I found a few threads on the mailing list on this, bit I'm not sure > if they explain this behaviour to me (threads referenced below). > Could someone point me in the right direction/documentation on this, > or just change how my mind works (nothing too drastically, please). > Do I really need to evaluate the selection beforehand? > Obviously, the example above is simplistic and should be done > differently, but I do have a situation where I'd like to be able to > index a sliced QueyrSet step by step, instead of iterating through > it. Or, what possibly could also solve my problem: can I iterate > through a (sliced) QuerySet step by step, by eg calling something > like a next() method each time I needed the next element? (I've > tried, but there's no next() method on QuerySets apparently). > > Thanks a lot, > > Evert > > http://groups.google.com/group/django-users/browse_thread/thread/ > aef03c62f655fe45/a6ce6074ceab7438?lnk=gst&q=queryset > +slicing#a6ce6074ceab7438http://groups.google.com/group/django-users/browse_thread/thread/ > 3b98ffd38969c49a/a56354e0c0e61a9a?lnk=gst&q=queryset > +slicing#a56354e0c0e61a9a --~--~---------~--~----~------------~-------~--~----~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---