title: Django multiple-choice field of options in database
body: <p>I am designing a model, view and template for my news aggregation app. I want the template to offer the user a multiple-choice field form with options from the database. How do I design this in my model? </p>
  
  <p>I was reading the Django documentation about ManyToManyField (the one with journalists and articles) but I don't think that is quite the right relationship because in my case, "articles" can exist without a journalist and journalist without an article.</p>
  
  <p>I have Users. I have Streams. Streams is a collection of news sites a user can sign up to follow and see aggregated headline snippets, such as from CNN,Twitter, Google News, etc etc. A Stream can exist with no Users. A Stream can have many Users. A User can have no Streams, in fact all user accounts start in my app with no Streams until they choose one. A User can have many Streams. </p>
  
  <p>In the template, I want to create a form with the list of all the Stream options in the database (this will likely change as I ad more options in the future). When a User selects a Stream, it will be added to their dashboard view. They can add and delete Streams. However, there is only 1 Twitter, 1 Google News, etc source. I can't use the typical choices option in the User model, I want it to be "dynamic" and pull straight from the Streams database.</p>
  
  <p>This is what I have now but I know it's not right:</p>
  
  <p><strong>streams/models.py</strong></p>
  
  <pre><code>from django.db import models
  from django.contrib.auth.models import User
  
  
  class Stream(models.Model):
      user = models.ManyToManyField(User, blank=True, null=True)
      name = models.CharField(max_length=30)
  </code></pre>
  
  <p><strong>user/models.py</strong></p>
  
  <pre><code>from django.db import models
  
  
  class User(models.Model):
       name = models.CharField(max_length=30)
  
       '''''
       #TODO: make this dynamic, streams is pulling from Streams model
          streams = (
              ('Google News'),
              ('Yahoo News'),
              ('Twitter'),
              ('CNN'),
              ('New York Times'),
              ('NBC News'),
              ('Huffington Post')
          )
          stream_choices = models.CharField(max_length=9, choices=streams)
  
  
       '''''
  </code></pre>