Джанго и модели с разными именами таблиц

В настоящее время я нахожусь в стадии разработки создания нового приложения для столов чемпионата. Цель состоит в том, чтобы предоставить приложение, в котором результаты игр различных лиг могут быть введены в бэкэнд, а финальные таблицы просматриваются во внешнем интерфейсе. В качестве базы данных я бы хотел использовать PostgreSQL, поскольку он предлагает схемы для разделения в разных лигах. Текущая схема (скорее всего) будет выглядеть так:

= schema ==== tablename ==============
- public  ___ teams
- league1 ___ league1_<season>_results
           |_ league1_<season>_tables
- league2 ___ league2_<season>_results
           |_ league2_<season>_tables
- league3 ___ league3_<season>_results
           |_ league3_<season>_tables

<season> ... 2019, 2020, ...

Как и результаты leagueX_, поскольку у leagueX _tables будет та же модель, то есть _results в лиге 1 имеет ту же структуру, что и _results в league2, _tables в league1 - та же модель в league2.

_tables (повторно) созданы с использованием Pandas в качестве человека в середине для вычисления таблиц (эта часть уже работает и в ящике). Единственное, что я все еще ищу, - это возможность изменить имя таблицы (динамически) для использования в той же модели.

К сожалению, я (пока) не знаком с фреймворком Django, раньше я использовал Flask и SQLAlchemy. Для этой комбинации у меня может быть небольшое представление о том, как решить эту проблему, но для этого проекта я рассматриваю использование Django в качестве основы вместо соединения свободных концов вместе, так как целостность некоторых частей (разрешения, ...) намного лучше, и это выглядит более всеобъемлющим

Итак, я хотел бы спросить сообщество, не было ли у кого-то подобной проблемы и как она могла быть решена.

Большое спасибо заранее, привет, Томас

Всего 1 ответ


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

class MyAbstractBaseModel(models.Model):
    field1 = models.CharField(max_length=20)

    class Meta:
        abstract = True


class MyDjangoModel(MyAbstractBaseModel):
    class Meta:
        db_table = "mymodel_result"


class MyPandasModel(MyAbstractBaseModel):
    class Meta:
        db_table = "mymodel_table"
        managed = False

Если у вас есть отдельные определения для таблиц, тогда просто определите свою модель панд как ваше требование и установите для параметра meta managed = False . Также не забудьте явно указать опцию db_table с вашим реальным именем таблицы (как для модели django, так и для модели pandas). Для получения дополнительной информации о метаданных моделя, пожалуйста, обратитесь к странице документации -

https://docs.djangoproject.com/en/3.0/ref/models/options/

Если ваши таблицы находятся в отдельных базах данных, также рассмотрите следующие вопросы - https://docs.djangoproject.com/en/3.0/topics/db/multi-db/


Есть идеи?

10000