Many thanks Macolm that's very clear. can't replicate the error any > > longer - I do apologize for wasting your time. > > > However, one additional question.. is there an easy way to a record > > from a queery set dynamically (without touching the DB)? What I'm > > looking do do in my view is as follows:- > > > 1. Create query set using a filter. > > 2. Add attributes to query set, via setattr (but not commit these to > > the DB) > > 3. Dyanmically filter the query set based on these new attributes > > 4. Return the qs to the template. > > Some background information to put my next comment in context: > > Because of step 2, what you have at step 3 is no longer a pure QuerySet, > but a cached list of results -- by iterating through them in step 2, you > have pulled all the results out of the database and into the cache. So > further filtering using QuerySet machinery lacks any point. The logic > behind being able to do > > qs1 = MyModel.objects.filter(name='fred') > qs2 = qs1.filter(date=datetime.now()) > > is that until you actually access the results of a QuerySet, no database > query is made. So, in the above example, qs1 never results in a call to > the database. In you sequence of steps above, there is no saving to be > made here, because step 2 accesses the members of the queryset. > > > Step 3 is still a slight puzzle. As a work around I am doing the > > following (but I suspect there must be a better way!) > > > ls=[] > > for i in qs: > > if i.newattribute == somevalue: > > ls.append(i) > > That seems logical. You could subclass QuerySet and add your filter as a > method in the subclass if you wanted to. But it's basically the same > code. The built-in queryset filter methods won't be able to help you, > because they are all geared towards querying database table columns. > > If memory usage was an issue (and I wouldn't panic too much here -- this > is only relevant if you've got thousands of results, at a guess), you > could create an iterator (using itertools.ifilter, from the Python > standard library, for example) that returned the next result from the > queryset satisfying the constraint and pass the iterator to your > template. That way, the results are only stored once in memory. > > Regards, > Malcolm
--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---