Django和具有不同表名的模型

2024-09-27 00:14:35 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我正处于为锦标赛表格创建新应用程序的设计阶段。其目标是提供一个应用程序,在该应用程序中,可以在后端输入不同联赛的比赛结果,并在前端查看最终表格。作为数据库,我想使用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结果一样,leagueX表将具有相同的模型,这意味着联赛1中的league结果与联赛2中的league结果具有相同的布局,联赛1中的league表与联赛2中的league表具有相同的模型

^ {}是使用大熊猫作为中间人来计算表(这部分已经工作和在抽屉中)创建的。我唯一仍在寻找的是(动态地)更改表名以在同一模型中使用的可能性

不幸的是,我还不熟悉Django框架,我以前使用过Flask和SQLAlchemy。对于这种组合,我可能对如何解决这个问题有一些想法,但对于这个项目,我正在考虑使用Django作为框架,而不是将松散的端点连接在一起,因为某些部分(权限,…)的完整性更好,而且看起来更全面

所以,我想问问社区,是否有人遇到过类似的挑战,以及如何解决

多谢各位,托马斯


Tags: django模型框架应用程序tablesresults表格season
1条回答
网友
1楼 · 发布于 2024-09-27 00:14:35

为了满足您的需求(我认为您在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模型定义为您的需求,并在meta选项中设置managed = False。另外,不要忘记在实际表名中显式地提到db_table选项(对于django和pandas模型)。有关modle meta选项的更多信息,请参阅文档页-

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

如果您的表驻留在不同的数据库上,也可以考虑以下^ https://docs.djangoproject.com/en/3.0/topics/db/multi-db/

相关问题 更多 >

    热门问题