2017-11-19 4 views
1

私は、それぞれの成分と一緒に製品の名前をキャプチャする簡単なアプリケーションを作成しています。私はランダムな製品とその成分を見ていたこと代替成分名のモデルデザイン

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) 

のための私のDjangoアプリケーションで定義された2つのモデルを持っているように、私は原料の代替名があることに気づきました。例えば、特定の製造業者は水を水、水、オオ、精製水、蒸留水などとする。

これらの代替名を効率的に取得できるモデルを作成するにはどうすればよいですか?

私は、このような

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

は、私はあなたが成分モデル名と製造者情報の変動モデル持つ外国人を作成することをお勧めします。これは、あなたが簡単にそれを保つことができる任意の成分のためのより多くの名前がある場合は、将来的にそう成分

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) 

の多くのバリエーションがあることを意味します。

または代わりにあなたがIngredientモデルに

class Ingredient(models.Model): 
    ... 
    # add json field and keep all name and manufacturer detail in dictionary 
    # [{'name':'aqua', 'manufacturer':'vendor name'},{},...] 
    data = JSONField() 
JSONField()を追加することができます