替代成分名称

时间:2017-11-19 14:52:35

标签: django database-design model

我正在创建一个简单的应用程序,它捕获产品的名称及其各自的成分。我在我的Django应用程序中定义了2个模型

class Product(models.Model):
    name = models.CharField(max_length=150, blank=False)


class Ingredient(models.Model):
    # 1 ingredient belongs to many products. 
    products = models.ManyToManyField(Product)
    name = models.CharField(max_length=150, blank=False)

当我看着随机产品及其成分时,我注意到有一种成分的替代名称。例如,某些制造商会将水,水,水,水,纯净水,蒸馏水等等。

如何才能最好地编写能够以有效方式捕获这些替代名称的模型?

我想过添加其他字段,例如

    alternativeName1 = models.CharField(max_length=150, blank=True)
    alternativeName2 = models.CharField(max_length=150, blank=True)
    alternativeName3 = models.CharField(max_length=150, blank=True)

但它似乎不是一个好的应用程序设计。

1 个答案:

答案 0 :(得分:1)

我建议您创建一个 Variation 模型,其中包含 Ingredient 模型,名称和制造商信息。这意味着您有许多成分的变体

class Variation(models.Model):
   ingredient = models.ForeignKey(Ingredient, related_name="variations")
   name = models.CharField(max_length=150, blank=False)
   manufacturer = models.CharField(max_length=150, blank=False)

所以将来如果有任何成分的名称更多,你可以很容易地保留它。

或者您也可以向成分模型添加JSONField()

class Ingredient(models.Model):
   ...
   # add json field and keep all name and manufacturer detail in dictionary
   # [{'name':'aqua', 'manufacturer':'vendor name'},{},...]
   data = JSONField()