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'> これは外部キーを台無しにします。

私の質問

これを行う方法はありますか?これにより、すべてのクラスが次のようなreprを持つようになり ます。各クラス<class 'project.APP_ROOT.models.SuperModel'>のforを手動でオーバーロードする必要はありません。__repr__これで問題が解決するかどうかさえわかりません。解決したとしても、これはうまく移植できません。

または、1つの大きくて醜いファイルの使用に戻る必要がありますか...

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 に答える