title: Django: Add related objects that are part of a set
body: <p>Apologies for the terrible title, I'm not sure how best to phrase this.</p>
  
  <p>I have more complex products that can have multiple options stored with in option sets, for example:</p>
  
  <pre><code>Shirts:
      Sizes:
          Small
          Medium
          Large
  </code></pre>
  
  <p>Obviously the same shirt can be had in a Small, Medium or Large size but I want our admins to be able to add extra sizes (or other options) at a later date.</p>
  
  <p>To express these I am using the following models:</p>
  
  <pre><code>class Product(models.Model):
      title = models.CharField(max_length=50)
      text = RichTextField(blank=True)
      product_code = models.CharField(max_length=20)
      left_image = models.FileField(null=True, blank=True)
      right_image = models.FileField(null=True, blank=True)
  
  def __str__(self):
      return self.title
  
  # A container that can hold multiple ProductOptions
  class ProductOptionSet(models.Model):
      title = models.CharField(max_length=100)
  
  class ProductOption(models.Model):
      option_set = models.ForeignKey(ProductOptionSet, related_name="test")
      option_title = models.CharField(max_length=100)
      option_slug = models.CharField(max_length=100, help_text='A system friendly version of the value')
  
  # Inherited from my CMS system.
  class ShirtProduct(Product):
      sizes = models.ManyToManyField(ProductOption, related_name="shirt_size")
  </code></pre>
  
  <p>I am looking to save these options based on some simple strings of information e.g key="size" and size = "medium"  in the ShirtProduct save() method.</p>
  
  <p>Currently I have the following:</p>
  
  <pre><code>def save(self, *args, **kwargs):
  [...]
      product_options = {
          'sizes': 'medium',
          'colour': 'blue'
      }
      for key, value in product_options.items():
          if key == "sizes":
              option = ProductOption.objects.get(option_slug=value)
              self.sizes.add(option)
  
      super(ShirtProduct, self).save(*args, **kwargs)
  </code></pre>
  
  <p>However this appears to do nothing. What am I missing?</p>