Наследование Джанго причиняет мне боль

Я делаю пивной сайт, и я застрял. Мне нужен рецепт, который я могу связать со многими различными ингредиентами. Есть ли способ создать модель «Ингредиент» и унаследовать множество разных моделей: «Хмель», «Зерно» и т. Д. Я хотел бы сделать это, чтобы у меня была связь между рецептом и ингредиентом, а у меня нет чтобы создать 100 различных взаимосвязей для каждого типа ингредиентов.

Это возможно?


person danatron    schedule 02.09.2012    source источник
comment
Вы говорите, что вам нужна модель под названием Hop, модель под названием Grain и так далее? Разве вы не хотели бы иметь поле для ингредиента_типа или что-то в этом роде?   -  person David Robinson    schedule 02.09.2012
comment
В общем, у вас должна быть отдельная модель, только если вам нужен другой код для работы с ней. Маловероятно, что это относится к хмелю и зерну, и было бы проще рассматривать их как два типа ингредиентов (с полем ingredient_type, различающим их).   -  person David Robinson    schedule 02.09.2012
comment
У них есть разные поля, например, мне нужен кислотный уровень хмеля, и я хочу сахарный потенциал зерна.   -  person danatron    schedule 02.09.2012


Ответы (1)


Хотя я бы лично не советовал этого в большинстве случаев, поскольку наследование таблиц - это боль (imho) в Django.

Вы можете сделать это следующим образом:

class Recipe(models.Model):
    name = models.CharField()

class Ingredient(models.Model):
    name = models.CharField()
    recipes = models.ManyToManyField(Recipe, related_name='%(app_label)s_%(class)s')

class Hop(Ingredient):
    pass

class Grain(Ingredient):
    pass
person Wolph    schedule 02.09.2012
comment
Это звучит как боль, но альтернатива указания hop_additions, Grain_additions и т. д. для всех 100 различных типов с разными параметрами звучит беспорядочно. Есть ли у меня другие варианты? - person danatron; 02.09.2012
comment
Альтернативой является, как указал Дэвид Робинсон, использование общей модели ингредиентов и просто указание типа. Запрос чего-то подобного может быть болезненным, поскольку у вас есть много разных моделей для запроса по отдельности. - person Wolph; 02.09.2012
comment
Еще одно уточнение: что, если у меня есть две модели, использующие ингредиенты, такие как рецепт и бревно? Есть ли способ настроить мой manytomany для работы с несколькими моделями? - person danatron; 03.09.2012
comment
@ user1104922: есть 2 способа: с общими внешними ключами и наследованием таблиц. И то, и другое следует использовать в крайнем случае, имхо. - person Wolph; 03.09.2012