I'm looking for an efficient way of combining two different models into
a single list for a folk song and lyrics sharing app. Many folk songs
are known by a variety of names, so to reflect this I created these two
models (leaving out a bunch of fields/definitions)

class Song(models.Model):
    title = models.CharField(maxlength=30)
    slug = models.SlugField(prepopulate_from=("title", ))
    [...]
    def get_absolute_url(self):
        return "/songs/%s" % self.slug

class Alias(models.Model):
    title = models.CharField(maxlength=30, core=True)
    song = models.ForeignKey(Song, edit_inline=models.TABULAR)
    def get_absolute_url(self):
        return self.song.get_absolute_url ()


The main thing the aliases are used for is putting entries on the songs
lists on index and category pages. I'm doing this in my views:

def index(request):
    titles = list(Alias.objects.all()) + list( Song.objects.all())
    titles.sort(lambda x, y: cmp(x.title, y.title)
    return render_to_response('songs/index.html', {'titles': titles})


This gives me lists of objects with the correct attributes and methods
which is great, and when I need to filter the results (for example, for
category views) I can easily do that by replacing .all() with .filter()
or whatever else. The problem with this solution is that I need to pull
the entire set of results into a list, and (if the site catches on),
that's bad memory use and potentially slow. I wish it were possible to
create an iterable object like a queryset that could be assigned two
models to do this more efficiently. If anyone has advice about any more
efficient way to get this done, I'd appreciate it.

Thanks,
Benj


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to