Как определить полиморфное отношение между моделями в Django?
Я работаю над приложением Django, которое содержит модель Offer
. Экземпляр Offer
содержит условия ценообразования и указывает на определение продукта. Модель продукта на самом деле является иерархией (у меня есть модель Television
, модель Camcorder
и т.д.). Поэтому я хотел бы, чтобы модель Offer
содержала полиморфную (или "общую" ) связь, указывающую на любой продукт.
В настоящее время все, что я нашел, это использовать общие ассоциации в приложении ContentTypes
. Это может сделать, но я ищу альтернативы, если они есть.
Спасибо за вашу помощь.
(одно решение для каждого ответа)
Ответы
Ответ 1
ContentTypes - правильный подход.
Это связано с тем, что ForignKey может указывать только на один тип таблицы, поэтому вам нужно пройти через промежуточную таблицу и выполнить разделение в зависимости от другого типа.
Так наследуется модель для иерархии классов, но ContentType для внешних ключей.
Ответ 2
Если вам нужно указывать только на "какой-либо продукт", а не на какую-либо модель, тогда решение состоит в том, чтобы иметь модель продукта, на которую наследуются все продукты (т.е. телевидение и видеокамера - оба подкласса продукта), и дать свою модель предложения ForeignKey to Product.
Ответ 3
Вы не можете сделать это в Django. Либо используйте общие отношения или приложение Django, которые добавляют эту функцию, например django_polymorphic.
Ответ 4
Взгляните на django-polymorphic, это реализует эту функцию, а также внутренне использует ContentTypes.
Ответ 5
Возможно, вам стоит взглянуть на наследование модели.