0

Как можно создать отношения вроде этого:Таблица Django со специфическим отношением к двум или нескольким другим таблицам

Представьте себе ресторан. Среди их данных - один для рецептов и один для ингредиентов. И есть еще один, который содержит такие категории продуктов, как обед, обед, завтрак, десерт, суп. Назовем его cat_food.

Повар хочет сортировать рецепты и ингредиенты с помощью cat_food. Например, существует отношение «ManyToOne» от рецептов к cat_food среди всех остальных столбцов. Таким образом, у одного рецепта есть одна категория, а одна категория - несколько рецептов.

Но повар также хочет сортировать ингредиенты таким образом. Здесь у нас были бы отношения «ManyToMany», в то время как мы можем использовать один ингредиент в рецепте десерта, как и в рецепте обеда или супа.

Одним из решений может быть создание таблицы cat_food для рецептов и ингредиентов для собственных нужд. Но как можно создать таблицу cat_food, в которой хранятся либо рецепты, либо ингредиенты? (Зависит от того, что дано)

Моя мысль состоит в том, чтобы использовать промежуточную модель и установить оба «foreignKeys» с опциями поля «blank = True 'и' null = True '. Но я не доволен этим. Возможно ли, что это может вызвать некоторые проблемы с базой данных в долгосрочной перспективе? Есть ли более элегантный способ справиться с такой ситуацией?

ответ

0

Я не уверен, что это то, что вы ищете, но, возможно, вы можете создавать логические значения для каждой категории для двух разных таблиц?

Например, если у вашего шеф-повара был предмет «клубника», а ваши разные категории были обедом, обедом, завтраком, десертом и супом. Затем вы можете проверить категории, в которые может попасть эта еда. Например: завтрак == Правда, десерт == Правда, суп == Ложно. и далее для остальных категорий.

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

+0

Мне нравится идея, но ... Я хочу сделать ее как можно менее избыточной. Я имею в виду, если есть новый элемент для cat_food, тогда я просто хочу разместить его там, чтобы иметь его как новый вариант в рецептах или ингредиентах. Хорошо, здесь мой пример немного на краю, потому что трудно создать новую категорию продуктов ... Скажем, новый - это астронавт-ужин ... Теперь, когда я добавляю новый рецепт или ингредиент, я хочу иметь выпадающего меню со всеми возможными элементами cat_food. И я хочу использовать как можно меньше столбцов. –

+0

Это имеет смысл, может быть, вы можете создать третий тип контента? Я думаю, вы можете импортировать тип контента, который вы создаете отдельно. Многочисленные отношения могут также работать, я использовал их раньше, и они довольно полезны. Попробуйте эту ссылку, чтобы узнать, будет ли это работать. https://docs.djangoproject.com/en/1.9/topics/db/examples/many_to_many/ – overstreetce

+0

Моя проблема заключается в том, что две таблицы общаются с тем же, что и кошачья еда. При этом у меня есть столбец для рецептов и ингредиентов в cat_food. Когда один дается, другой пуст.Я мог бы справиться с этим через «blank = True» и «null = True», я думаю. Но я не совсем уверен в дальнейшем устранении неполадок. –

0

IMHO, стандартные отношения, внешний ключ и многие-ко-многим, как вы сказали, кажутся лучшими; потому что вы можете управлять каждым элементом (рецептом, ингредиентом, категорией) с подходящими полями, а django очень хорошо поддерживает ссылки на их связь, поэтому запросы, связанные с их отношениями, становятся довольно легкими.

Кроме того, если вы хотите настроить таблицу M2M с дополнительными полями, вы можете построить себя, используя through attibute.

+0

Итак, вы сказали бы, что это хороший способ сделать это так. Создайте один cat_food с рецептами и ингредиентами, в то время как у обоих из них есть опции поля «blank = True» и «null = True». Таким образом, это может быть либо элемент рецепта, либо ингредиенты. Да, я собираюсь использовать прямую таблицу через. Я думаю, это полезно в этом случае –

Смежные вопросы