2013-07-24 3 views
-1

Я создаю магазин продуктов.Как сделать «пресеты» в моделях Django

class Product(models.Model): 
    name = models.CharField(verbose_name=_(u'name'), max_length=200) 
    quantity = models.IntegerField(verbose_name=_(u'quantity')) 

>>> Product.objects.create(name="egg", quantity="100") 
>>> Product.objects.create(name="ham", quantity="10") 

Теперь я хочу, чтобы создать рецепты, что-то вроде: омлет из 3 яиц и один кусок ветчины. я попытался описать что-то вроде:

class Recipe(models.Model): 
    name = models.CharField(verbose_name=_(u'name'), max_length=200) 
    items = models.ManyToManyField('Product', related_name='recipe_sets') 

Но застрял в описании количество необходимых продуктов для одного recipe.

Должен ли я поставить quantity в другой модели? Как рассчитать количество порций (в зависимости от количества продукта)? Есть ли элегантный способ или приложение для вычета продуктов (в результате приготовления одного блюда)?

+0

Это на самом деле не Джанго вопрос. Это вопрос проектирования схемы. Вероятно, вам следует провести некоторое исследование структуры схемы для приложения типа Order/Product/Parts, которого много. Это поможет вам в правильном направлении. –

ответ

1

Вам понадобится другой стол. ManyToMany создаст промежуточную таблицу, связывающую две модели, которые у вас есть. Но если вы более подробно указали, как эта таблица создана, вы можете добавить поля в таблицу ссылок.

См. Документацию extra fields on many to many relationships. В принципе, вы бы другую модель:

class Ingredients(models.Model): 
    product = models.ForeignKey(Product) 
    recipe = models.ForeignKey(Recipe) 
    quantity = models.SomeField(..) 

А затем измените Recipe определение для ManyToManyField:

items = models.ManyToManyField('Product', related_name='recipe_sets', through='Ingredients') 
Смежные вопросы