Python模块导入重新定义用于重构的命名空间

2024-04-20 04:18:33 发布

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

我试图为一系列Django模型重构代码,但这对于一般python导入是有效的。让我解释一下我的设置和问题(完全是假的类等)

APP_ROOT/
|- __init__.py
|- tests/
|- urls.py
|- models/
|    |- __init__.py
|    |- BunchOfModels.py
|    |- SomeMoreModels.py
\- admin.py

models.__init__中:

^{pr2}$

这允许我执行以下操作:

from APP_ROOT.models import SuperModel
# Where SuperModel is in SomeMoreModels

问题是类repr是:

<class 'project.APP_ROOT.models.SomeMoreModels.SuperModel'> 把外键弄乱了。在

我的问题

有没有办法让我所有的课程都有一个更像: <class 'project.APP_ROOT.models.SuperModel'>而不为每个类手动重载__repr__。我甚至不确定这是否能解决问题,即使解决了,也不会很好地移植。在

或者我需要回去使用一个大的,丑陋的文件。。。在


Tags: django代码py模型projectappinitmodels
1条回答
网友
1楼 · 发布于 2024-04-20 04:18:33

正如我已经说过的,Django不建议您将模型分散到多个文件中。但这可以解决你的问题

from django.db import models

class SuperModel(models.Model):
    class Meta:
        app_label = 'APP_ROOT'

app_labelattr应该在每个模型的Meta类中。您还可以从基元类中inheritMeta。在

另一种方法是将经理、效用函数移到models.py之外(如果你有)。但在这种情况下,你可能会得到循环导入。在

相关问题 更多 >