我正在创建一个简单的应用程序,它捕获产品的名称及其各自的成分。我在我的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)
但它似乎不是一个好的应用程序设计。
答案 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()