Python模块导入重新定义名称空间/ __ repr__以进行重构

时间:2012-05-08 06:25:23

标签: python django

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

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

# models/__init__.py
from APP_ROOT.models.BunchOfModels import *
from APP_ROOT.models.SomeMoreModels import *

这允许我执行以下操作:

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

问题是 repr 类是:

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

我的问题

有没有办法做到这一点,所以我的所有类都有一个repr更像: <class 'project.APP_ROOT.models.SuperModel'>没有为每个类手动重载__repr__。我甚至不确定这会解决问题,即使它确实如此,这也不会很好。

还是我需要回到使用一个大而难看的文件......

1 个答案:

答案 0 :(得分:0)

正如我已经评论过的,Django不建议您将模型分布在多个文件上。但这可以解决您的问题

from django.db import models

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

app_label attr应该在每个模型中的Meta类中。您也可以inherit Meta来自基本元类。

其他方法可能是在models.py之外移动经理,效用函数(如果有的话)。但在这种情况下,您可能会获得循环导入。