我正在尝试重构一系列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__
。我甚至不确定这会解决问题,即使它确实如此,这也不会很好。
还是我需要回到使用一个大而难看的文件......
答案 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
之外移动经理,效用函数(如果有的话)。但在这种情况下,您可能会获得循环导入。