【问题标题】:Model design on alternative ingredients name替代成分名称的模型设计
【发布时间】:2018-05-02 20:34:59
【问题描述】:

我正在创建一个简单的应用程序,它可以捕获产品名称及其各自的成分。我在我的 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)

当我查看随机产品及其成分时,我注意到一种成分有其他名称。例如,某些制造商将水作为,aqua,h2o,eau,纯净水,蒸馏水等。

我怎样才能最好地编写一个能够以有效方式捕获这些替代名称的模型?

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

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

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

【问题讨论】:

    标签: django database-design model


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 2021-10-29
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2015-07-26
      • 2012-01-02
      • 1970-01-01
      相关资源
      最近更新 更多