Парни шага скрутки, я пишу простое приложение, которое регистрирует рецепты.
Я разрабатываю свои модели и споткнулся через проблему
Модели My Dish должны иметь много Компонентов. Это не проблема, потому что я сделал бы что-то вроде этого
ingredients = models.ManyToManyfield(Ingredient)
Никакие проблемы, моя тарелка теперь может иметь много ingrendients.
Однако проблема состоит в том, что компонент должен существовать различных количеств.
Т.Е. 4 яйца, 7 столовых ложек сахара
Моя Модель Компонента очень проста в данный момент
class Ingredient(models.Model):
name = models.TextField(blank=False)
slug = models.SlugField(blank=True)
Как я пошел бы о, решают эту проблему? Какие поля я должен был бы добавить, я должен буду использовать 'через' атрибут на моем ManyToManyfield для решения этой проблемы?
Думаю, вы получили правильный ответ с помощью таблицы «сквозных» ( 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 Cl молока, но еще один с 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)