我试图在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管理员中使用内联。你们推荐什么?非常感谢=)
答案 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。