2012-05-08 30 views
0

我想修改我的代碼進行了一系列Django模型,但是這是適用於一般蟒蛇進口。讓我解釋一下我的設置和問題(與完全地假類等)Python模塊導入重新定義命名空間/ __ repr__的重構

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 

的問題是,類再版是:

<class 'project.APP_ROOT.models.SomeMoreModels.SuperModel'> 這攪亂外鍵。

我的問題

有沒有辦法做到這一點,使我的所有類有再版更像: <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(如果有的話)。但在這種情況下,您可能會得到循環導入。