If you have a dataset that is too large to fit in memory comfortably, the ability to pass a generator to an httpresponse means you can break it up into multiple smaller queries (outside the template system anyway):
def queryset_to_csv(queryset,delimiter=',',steps=500): """ generator for large querysets """ try: # raw query set fieldmeta = queryset.model._meta.fields except AttributeError: # it's been evaluated fieldmeta = qs._meta.fields fields = [] row= [] for f in fieldmeta: fields.append(f.get_attname()) row.append('"'+f.name+'"') yield "%s\r\n" % delimiter.join(row) ids=[o["id"] for o in queryset.values("id")] count=len(ids) for n in range(steps,count+steps,steps): lo,hi=n-steps,n qs=queryset.model.objects.filter(pk__in=ids[lo:hi]) it=[] for i in qs: row = [] for f in fields: val = str(getattr(i,f)).replace('"',"'").replace(delimiter,' ') row.append('"'+val+'"') it.append(delimiter.join(row)) yield "\r\n".join(it) ... return HttpResponse(queryset_to_csv(somequeryset,',', 250),mimetype='text/csv') -- 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.