2017-11-19 6 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) 

내 장고 응용 프로그램에 정의 된 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) 

그래서 어떤 성분든지를위한 이름이 더 있으면 당신은 쉽게 그것을 유지할 수 있습니다.

또는 대안 당신은 모델 성분하기 위해 JSONField()을 추가 할 수 있습니다

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