@dodo101000101

Как разделить реализацию различных типов модели?

Есть потребность создать модель, которая при создании превращается в один из своих наследников. То есть при инициализации мы указываем каким именно типом этой модели этот экземпляр будет. Проблема в том, что в SQL декларированы наборы полей для каждой модели. Для каждого типа можно завести отдельную таблицу. Но важно, чтобы остальная система общалась с каждым конкретным типом через единый интерфейс. Как это реализовать, не превратив код в костыль?
  • Вопрос задан
  • 145 просмотров
Решения вопроса 2
rSedoy
@rSedoy
Python/Django
Так как вы указали django, значит выбор у вас из того что предлагает его ORM, все три способа описаны на одной странице https://docs.djangoproject.com/en/2.1/topics/db/mo... У вас очень общие требования, так что сложно порекомендовать что-то конкретное

ЗЫ часто если ""наборы полей" не связи между таблицами, то такое вообще через JSONField решают.
Ответ написан
ri_gilfanov
@ri_gilfanov
Web- and desktop-developer
Может быть django-polymorphic подойдёт:
https://django-polymorphic.readthedocs.io/en/stabl...

При многотабличном наследовании, Django ORM по-умолчанию позволяет получать все записи родительской и дочерних моделей только как объекты класса родительской модели.

Библиотека django-polymorphic позволяет, делая запрос объектов родительской модели, получать объекты разных классов (как родительской, так и дочерних моделей).

Плюс там реализованы классы, позволяющие адаптировать админку Django к удобной работе с полиморфными данными.

Например, иметь в админке единый подраздел для родительской и дочерних моделей с фильтром записей по типу, при создании проходить через промежуточную страницу с выбором типа, а так же скажем выбирать тип при создании записей в инлайн-полях. Причём, всё достаточно опционально.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
solotony
@solotony
code for food, caviar preferably
GenericForeignKey ?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы