Я думаю, что вы получили правильный ответ со сквозной таблицей (http://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany)
Модель
class Recipe(models.Model):
name = models.TextField(blank=False)
ingredients = models.ManyToManyField(Ingredient, through='Components')
class Ingredient(models.Model):
name = models.TextField(blank=False)
slug = models.SlugField(blank=True)
class Components(models.Model):
recipe = models.ForeignKey(Recipe)
ingredient = models.ForeignKey(Ingredient)
quantity = models.DecimalField()
Вы можете поместить единицу количества (грамм, килограмм, столовую ложку и т. Д.) На уровень ингредиентов, но я думаю, что это лучше на уровне ингредиентов (например, вы можете иметь 1 рецепт с 10 мл молока, а один с 1 л. .. Так что «разные» единицы для одного и того же ингредиента.
Создание данных
Под блюдом вы подразумеваете рецепт, верно? Если вы заглянули на предыдущую ссылку (http://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany),, то они дадут вам хороший пример (на основе битлз).
В основном:
1.Создать рецепт:
cake=Recipe.objects.create(name="Simple Cake")
2.Создать несколько ингредиентов (если они еще не существуют из предыдущего рецепта;)):
egg = Ingredient.objects.create(name="Egg")
milk = Ingredient.objects.create(name="milk")
3.Создать отношения:
cake_ing1 = Components.objects.create(recipe=cake, ingredient=egg,quantity = 2)
cake_ing2 = Components.objects.create(recipe=cake, ingredient=milk,quantity = 200)
и так далее. Плюс, теперь я совершенно уверен, что юнит должен перейти на уровень компонентов, с юнитом по умолчанию как «штука» (это будет для твоих яиц ...), и будет что-то вроде «мл» для молока.
Доступ к данным
Чтобы получить ингредиенты (Компоненты) рецепта, просто сделайте:
cake = Recipe.objects.get(name = "Simple Cake")
components_cake = Components.objects.get(recipe = cake)