用Django模型表示混合

时间:2011-11-22 22:51:59

标签: django django-models representation

我试图在Django中代表混合物。类似的东西:

Chemical #1 - 50%
Chemical #2 - 30%
Chemical #3 - 20%

我想我会使用一个名为composition的包装器,如下所示:

class Composition(models.Model):
    """ Just a Wrapper """
    def save(...):
        #Validate ingredients add up to 100% and such


class Ingredient(models.Model):
    composition = models.ForeignKey('Composition',related_name='ingredients')
    name = models.CharField(max_length = 10)
    percentage = models.IntegerField()

我很确定有更好的方法可以做到这一点。请记住,我这样做,所以我以后可以在Django管理员中使用内联。你们推荐什么?非常感谢=)

1 个答案:

答案 0 :(得分:3)

在我看来,似乎最好保留一份成分列表,然后在创建作品时引用它们,而不是每次都输入成分名称。你可以使用多对多关系和直通表来完成它,如下所示:

class Ingredient(models.Model):
    name = models.CharField(max_length=10)

class Composition(models.Model):
    name = models.CharField(max_length=255)
    ingredients = models.ManyToManyField(Ingredient, through='CompositionIngredient')

    def save(...):
        #Validate ingredients add up to 100% and such

class CompositionIngredient(models.Model):
    composition = models.ForeignKey(Composition)
    ingredient = models.ForeignKey(Ingredient)
    proportion = models.DecimalField()

有关详细信息,请参阅Django docs

编辑:这是关于如何通过管理界面中的表格处理的documentation