2016-03-05 18 views
3

當我剛剛打破了我的models.py到一個模塊如下:Django驗證。模型中使用多個文件

models/ 
    __init__.py 
    model1.py 
    model2.py 
    userModel.py 
    .... 

初始化的.py進口的所有類的,所以我仍然可以在他們那裏得到使用模型.model1如下

from model1 import model1 
from model2 import model2 
from userModel import userModel 

這是工作正常不過的Django可以不再使用找到AUTH_USER_MODEL:

AUTH_USER_MODEL = 'app.userModel' 

我得到的錯誤:

LookupError: App 'app' doesn't have a 'userModel' model. 

我試圖改變這

AUTH_USER_MODEL = 'app.models.userModel' 

但這也不管用。任何意見大加讚賞

傑克

+0

你是什麼意思的實際數據?問題中詳細說明的信息正是設置。我可以添加init文件,如果這會幫助 – JMzance

+0

我認爲這只是你的問題中的一個錯字,但是在導入之前你錯過了一個'.'。它應該是'from .model1 import model1'。否則,導入將無法在「app/models」目錄之外工作。 –

+0

是這樣的,爲什麼? – JMzance

回答

1
AUTH_USER_MODEL = 'app.UserModel' 

UserModel應該是一類由models.Model繼承,而不是一個模塊。

它將通過django.apps.apps.get_model(settings.AUTH_USER_MODEL)採用字符串app.Model其中appINSTALLED_APPSModel註冊的Django應用程序傳遞是app.models模塊和子模塊中的任何模型。

編輯

的Django 1.9之前,你的模型說謊​​一個子模塊中應在其元類定義app_label = 'app_name'

class MyUser(models.Model): 
    class Meta: 
     app_label = 'app_name' 
+0

是的,它是一個從models.Model繼承而來的類,在我將它放入它自己的模塊之前,它工作的很好,所以在這個意義上這個設置是正確的。然而,將所有模型放在一個models.py文件中變得不可行,所以我將它們分開。 userModel.py是一個包含userModel類的模塊。 – JMzance

+0

編輯之後:是的,這是情況,但Django無法在模型模塊中找到userModel類,儘管我將其導入到__init__.py文件中(這意味着我應該能夠像models.userModel一樣訪問它 - 完全正確和以前一樣) – JMzance

+0

你的類名應該以大寫字母開頭。模塊名稱應該是snake_cased。我認爲問題在於你的模型與模塊名稱相同。一旦django在'app.models'中找到了一個名爲'userModel'的對象(無論是哪種類型),它就不會在子模塊中繼續前進,以避免額外的開銷。這是一個假設,但它使敏感。您的型號名稱不應與您的模塊命名相同。 –