I usually reverse m2m definitions as below. In your code above you're seeing a conflict in table names due to the underscore in your model class names. If you remove the underscores it should work.
Reversing the relationships could work if you want to keep the underscores.
class Option_Choices(models.Model):
"""
choices for each option
"""
name = models.CharField(max_length=30)
product_options = models.ManyToManyField("Product_Options", related_name='choices')
class Product_Options(models.Model):
"""
products can have many options
"""
OPTION_TYPE=(
('Color', 1),
)
name = models.CharField(max_length=30)
option_type = models.IntegerField(choices=OPTION_TYPE)
products = models.ManyToManyField("Product", related_name='options')
class Product(models.Model):
"""
there are options for products - different sizes / colors
"""
name = models.CharField(max_length=30)