这方面有一些接近,但我能找到的只是我正在做的事情而且它没有用。
以下是一个示例:您的产品可以有多个选项。每个选项都有多种选择。
class Option_Choices(models.Model):
"""
choices for each option
"""
name = models.CharField(max_length=30)
def __unicode__(self):
return self.name
class Product_Options(models.Model):
"""
products can have many options
"""
name = models.CharField(max_length=30)
option_type = models.IntegerField(choices=OPTION_TYPE)
choices = models.ManyToManyField(Option_Choices, related_name='product_options_choices')
def __unicode__(self):
return self.name
class Product(models.Model):
"""
there are options for products - different sizes / colors
"""
name = models.CharField(max_length=30)
options = models.ManyToManyField(Product_Options, related_name='product_options')
def __unicode__(self):
return self.name
看起来很简单,我收到此错误
'options'是通过模型手动定义的m2m关系 Product_Options,没有Product_Options的外键 和产品
我尝试了很多不同的东西,包括使用“通过”无法弄清楚为什么这不起作用。这是每个人都说要做的事情。任何想法?
答案 0 :(得分:3)
我通常将m2m定义反转如下。在上面的代码中,由于模型类名称中的下划线,您在表名中看到了冲突。如果您删除下划线,它应该有效。
如果你想保留下划线,可以改变关系。
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)