0

我正在尝试为一系列 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'> 这弄乱了外键。

我的问题

有没有办法做到这一点,以便我所有的课程都有一个更像是: <class 'project.APP_ROOT.models.SuperModel'>无需手动重载__repr__每个课程。我什至不确定这是否会解决问题,即使解决了,这也不会很好地移植。

还是我需要重新使用一个又大又丑的文件...

4

1 回答 1

0

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

from django.db import models

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

app_labelattr 应该在Meta每个模型中的类中。您也可以从基本元类继承。 Meta

其他方法可能是将管理器、实用功能移到外部models.py(如果有的话)。但在这种情况下,您可能会获得循环导入。

于 2012-05-08T10:24:50.053 回答