Подтвердить что ты не робот

Как определить полиморфное отношение между моделями в Django?

Я работаю над приложением Django, которое содержит модель Offer. Экземпляр Offer содержит условия ценообразования и указывает на определение продукта. Модель продукта на самом деле является иерархией (у меня есть модель Television, модель Camcorder и т.д.). Поэтому я хотел бы, чтобы модель Offer содержала полиморфную (или "общую" ) связь, указывающую на любой продукт.

В настоящее время все, что я нашел, это использовать общие ассоциации в приложении ContentTypes. Это может сделать, но я ищу альтернативы, если они есть.

Спасибо за вашу помощь.

(одно решение для каждого ответа)

4b9b3361

Ответ 1

ContentTypes - правильный подход. Это связано с тем, что ForignKey может указывать только на один тип таблицы, поэтому вам нужно пройти через промежуточную таблицу и выполнить разделение в зависимости от другого типа.

Так наследуется модель для иерархии классов, но ContentType для внешних ключей.

Ответ 2

Если вам нужно указывать только на "какой-либо продукт", а не на какую-либо модель, тогда решение состоит в том, чтобы иметь модель продукта, на которую наследуются все продукты (т.е. телевидение и видеокамера - оба подкласса продукта), и дать свою модель предложения ForeignKey to Product.

Ответ 3

Вы не можете сделать это в Django. Либо используйте общие отношения или приложение Django, которые добавляют эту функцию, например django_polymorphic.

Ответ 4

Взгляните на django-polymorphic, это реализует эту функцию, а также внутренне использует ContentTypes.