title: Efficient Pagination from Join in Django
body: <p>I've got a problem here with a join and pagination. I have 3 Models:</p>
  
  <ul>
  <li>Pad</li>
  <li>Tag</li>
  <li>TagRelation</li>
  </ul>
  
  <p>I use Tag relation to manage a ManyToMany relationship betweent Pads and Tags (with the <b>through</b> attribute of te ManyToMany field).
  Now when i do a join on the Pad and Tag tables it gives me something like this...</p>
  
  <pre><code>pad.name   tag.name     etc
  ---------------------------
  pad1       tag1         ...
  pad1       tag2         ...
  pad2       tag3         ...
  </code></pre>
  
  <p>Now when i create a Paginator() object from these results it's obviously the wrong item count per page. I would have to iterate throught ALL the results and generate a dictionary like this...</p>
  
  <pre><code>[{name:'pad1', tags:['tag1', 'tag2']}, {name:'pad2' ....]
  </code></pre>
  
  <p>... and use the Paginator on this to get the correct pages.</p>
  
  <p>What's the best approach for this Problem? I could do a DB query for each Pad object on the current page to get it's Tags but I guess that would kill the server sooner or later (should be performant).</p>
  
  <p>The content's of the results can also be quite long and iterating through the whole set would cost a lot of system memory (or would it? enlighten me :) ).</p>