вопрос о manyToManyField

Парни шага скрутки, я пишу простое приложение, которое регистрирует рецепты.

Я разрабатываю свои модели и споткнулся через проблему

Модели My Dish должны иметь много Компонентов. Это не проблема, потому что я сделал бы что-то вроде этого

ingredients = models.ManyToManyfield(Ingredient)

Никакие проблемы, моя тарелка теперь может иметь много ingrendients.

Однако проблема состоит в том, что компонент должен существовать различных количеств.

Т.Е. 4 яйца, 7 столовых ложек сахара

Моя Модель Компонента очень проста в данный момент

class Ingredient(models.Model):
    name = models.TextField(blank=False)
    slug = models.SlugField(blank=True)

Как я пошел бы о, решают эту проблему? Какие поля я должен был бы добавить, я должен буду использовать 'через' атрибут на моем ManyToManyfield для решения этой проблемы?

1
задан dotty 7 June 2010 в 09:49
поделиться

1 ответ

Думаю, вы получили правильный ответ с помощью таблицы «сквозных» ( 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)
2
ответ дан 3 September 2019 в 00:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: