Django и модели с разными именами таблиц - PullRequest
0 голосов
/ 08 февраля 2020

В настоящее время я нахожусь в стадии разработки создания нового приложения для таблиц чемпионата. Цель состоит в том, чтобы предоставить приложение, в котором результаты игр различных лиг могут быть введены в бэкэнд, а финальные таблицы просматриваются во внешнем интерфейсе. В качестве базы данных я хотел бы использовать 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 _table будут иметь ту же модель, что означает, что _results в лиге 1 имеет ту же структуру, что и _results в league2, _tables в league1 - это та же модель, что и в league2.

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

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

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

Заранее большое спасибо, с уважением Томас

1 Ответ

0 голосов
/ 10 февраля 2020

Для того, чтобы удовлетворить ваши цели (я полагаю, что в обеих таблицах, созданных с помощью 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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...