2012-05-08 2 views
0

私は一連のDjangoモデルのために自分のコードをリファクタリングしようとしていますが、これは一般的なPythonのインポートに有効です。私はmodels.__init__リファクタリングのためのPythonモジュールインポートの名前空間/ __ repr__

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

(completly偽のクラスなどで)私のセットアップと問題を説明してみましょう:

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

問題があることである:

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

これは私が次の操作を行うことができますクラス改めては:

<class 'project.APP_ROOT.models.SomeMoreModels.SuperModel'> これは外部キーを混乱させます。

私の質問:手動で各クラスの__repr__に過負荷をかけることなく、 <class 'project.APP_ROOT.models.SuperModel'>:すべての私のクラスはのrepr以上のように持っていることを

ので、これを行う方法があります。私はこれが問題を解決することさえ確信していません、そして、それがしても、これは非常にうまくいきません。

または私は戻って一つの大きな、醜いファイルを使用しに行く必要がない...私はすでにコメントしたよう

+1

Djangoでは、モデルを複数のファイルに分散することはお勧めしません。 – San4ez

答えて

0

、Djangoはいくつかのファイルにあなたのモデルを広めるためにあなたをお勧めしません。しかし、これは

from django.db import models 

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

app_label attrはすべてのモデル内部Metaクラスにする必要がありますあなたの問題を解決することができます。また、ベースメタクラスからinheritMetaを入力することもできます。

他のアプローチは、移動マネージャ、ユーティリティ機能外models.py(もしあなたがそれらを持っている場合)である可能性があります。しかし、この場合は、循環的なインポートを取得する可能性があります。

関連する問題