2017-03-20 76 views
0

我有一個名爲myoffice的Django項目。在這個項目中我創建了一個應用程序建議在創建之前,我執行了makemigrations並遷移創建auth_user表和其他表,如auth_user_groups等。如何在Python Django項目中爲多個應用程序使用模型?

創建提案應用程序後,它工作正常。

現在我創建了一個名爲費用的新應用程序。我寫了所有模型,視圖,模板和url文件。在我的模型,一對夫婦的車型有這樣的外鍵引用用戶:

exch_usr = models.ForeignKey('User', on_delete=models.PROTECT) 

我已經導入的用戶模型如下:

from django.contrib.auth.models import User 

然而,在運行makemigrations我得到一個錯誤:

ValueError: Cannot create form field for 'txn_usr' yet, because its related model 'User' has not been loaded yet 
+0

我想要做的是每筆交易都會有這將是用戶表的外鍵引用的字段。 – Parry

回答

1

如果鏈接的模型在另一個應用程序中,則需要引用目標字符串中的模型。

exch_usr = models.ForeignKey('auth.User', on_delete=models.PROTECT) 

注意,你並不需要導入用戶在所有。

+0

我把它叫做'exch_usr = models.ForeignKey('auth.User',on_delete = models.PROTECT)' 現在我得到一個錯誤 - '''django.core.exceptions.FieldError:Unknown field(s)(exch_usr)爲交易所指定' – Parry

0

如果您已經在models.py上導入用戶模型,則可以將其設置爲ForeignKey。請注意它不是一個字符串。

exch_usr = models.ForeignKey(User, on_delete=models.PROTECT) 
0

@danielr的回答是完美的,但我有一個建議@Parry。因此,如果用戶模型可能會換成另一個(將來會考慮)並且儘可能使您的應用程序可重用,那麼應該使用settings.AUTH_USER_MODEL作爲模型中的參考。有關定製和引用用戶模型的更多信息,請參閱https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#referencing-the-user-model。在你的代碼中,你必須使用get_user_model Django(創建用戶引用)實用程序來以一種乾淨的方式創建這個開關。

class SomeClass(models.Model): .... custome_user = models.ForeignKey(settings.AUTH_USER_MODEL)

並作出引用用戶屬性:

from django.contrib.auth import get_user_model User = get_user_model() class AnotherClass(models.Model): .... username = User.USERNAME_FIELD

+0

我試過你的解決方案,但它給了我錯誤 - '模型尚未加載'。所以我嘗試添加以下內容到models.py 'import Django' 'django.setup()' 但現在它只是掛在makemigrations上。 – Parry

+0

@Parry:我沒有清楚你在models.py中有什麼。請給我更多。 儘管你必須在第一個makemigrations中執行我建議的操作,因爲在第一次makemigrations運行後會遇到麻煩,所以如果你已經啓動了一個項目,不要這樣做: https://docs.djangoproject.com/ EN/1.10 /主題/認證/定製/#變到一個定製用戶模型,項目中期 – Reidel

相關問題