2012-10-16 88 views
53

我有一個問題。在Django我創建了一個新的模式:Django:將驗證用戶導入模型

from django.db import models 
from django.contrib.auth import user 

class Workers(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 
     work_group = models.CharField(max_length=20) 
     card_num = models.IntegerField() 
    def __unicode__(self): 
      return self.user 

但它不工作:ImportError: cannot import name user

如何解決呢?

所以,我想在db中創建一個新表「workers」,它與表「auth_user」有OneToOne的關係。謝謝。

回答

131
from django.contrib.auth.models import User 

你錯過了模型 - 用戶是大寫。

如果使用自定義的用戶模型,你應該使用:

from django.contrib.auth import get_user_model 
User = get_user_model() 

更多細節可以在docs找到。

改變在Django 1.11:

在導入時調用get_user_model()加入的能力。

+0

感謝了很多,但在Django的文檔也說沒有地方車型再次https://docs.djangoproject.com/en/dev/ref/contrib/auth/ 順便說一句謝謝。 – BlaShadow

61

如果您使用的是自定義的用戶模型,請執行以下操作來引用它:

from django.conf import settings 
.... 
user = models.ForeignKey(settings.AUTH_USER_MODEL) 

from django.contrib.auth import get_user_model 
User = get_user_model() 

,或者如果外鍵或多對多關係許多使用它

docs

+6

這比接受的答案更正確,因爲它更便於攜帶。 – Groady

1

爲了保持代碼的通用性,請使用get_user_model()方法檢索用戶模型和AUTH_USER_MODEL設置爲在定義模型與用戶模型的關係時引用它,而不是直接引用auth用戶模型。

裁判:Django By Example

0

AUTH_USER_MODEL是一個很好的解決方案。這裏是根據問題的完整解決方案。

from django.db import models 
from django.conf import settings 

class Workers(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL) 
    work_group = models.CharField(max_length=20) 
    card_num = models.IntegerField() 

    def __unicode__(self): 
     return self.user.id