title: What's the best way to allow an infinite amount of foreign keys to the same model?
body: <p>I'm making a forum with django right now, and I want it so that anyone can comment on anyone else's comment. Right now I have a foreign key in my 'Comment' model that points back to itself so I can get the parent comment easily from any comment.</p>
  
  <p>In my theory this worked great, because from any comment I could get all of its child comments, and then just keep branching down from there to get every single child comment. However I'm having trouble actually implementing this when it comes to getting the data from the view to the template.</p>
  
  <p>I want it to be possible to have an infinite number of child comments, because who knows how long a discussion will last and I don't want to arbitrarily limit it. The problem I'm having is would you get all of those comments from the view to the template without losing their relationship to their parent comment?</p>
  
  <p>Currently this is what the psuedocode for my code looks like:</p>
  
  <pre><code>#the view
  def comment_page(request, forum, comment_id):
     #this is the main comment that all others will stem from
     main_comment = Comment.objects.get(id=comment_id)
     children_comments = main_comment.comment_set.all()
  
  #the template
  {% for comment in children_comments %}
    &lt;p class='comment'&gt;{{comment}}&lt;/p&gt;
  {% endfor %}
  </code></pre>
  
  <p>Obviously I'm not even trying to get all the child comments here, it just gets child comments of the very first post. What I don't understand is how can I then go through each of these child comments and then get all of theirs, and keep doing that for each new comment?</p>
  
  <p>It makes the most sense to do it in the view since I am able to use Django's QuerySet API in there, but I don't see how I would be able to pass all of the comments to the template without losing their relationship to their parent. The only idea I can think of is to go through all of the comments in the view and build up a string of html that I just pass and simply display in the template, but that seems like a horrible idea because it'd be dealing with template related stuff in the view.</p>