2012-10-16 13 views
53

問題が1つあります。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

どのようにそれを修正するためのDjangoのでは、私は新しいモデルを作成しましたか?

したがって、テーブル "auth_user"との関係がOneToOneのdbという新しいテーブル "workers"を作成したいとします。ありがとう。

答えて

131
from django.contrib.auth.models import User 

あなたはモデルを見逃しました。ユーザーは大文字になりました。カスタム・ユーザー・モデルを使用している場合

あなたが使用する必要があります。

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

詳細はdocsで見つけることができます。

ジャンゴ1.11で変更

get_user_modelを(呼び出す機能)は、インポート時に添加しました。

+0

おかげで、それはノーと言う多くが、Djangoのドキュメントに。 – BlaShadow

61

あなたはそれを参照するには、以下のか、カスタム・ユーザー・モデルを使用している場合:

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

た場合、または外部キーまたは多対多の関係でそれを使用して:

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

docs

+6

これは移植性が高いので、受け入れられた答えよりも正しいです。 – Groady

1

コードを汎用的に保つには、get_user_model()メソッドを使用してユーザーモデルと012を取得しますは、authユーザーモデルを直接参照するのではなく、モデルの関係をユーザーモデルに定義するときに参照するように設定されています。

REF:Django By Exampleブック

0

AUTH_USER_MODELは良い解決策です。ここに質問ごとの完全な解決策があります。モデルは再びところで 感謝をhttps://docs.djangoproject.com/en/dev/ref/contrib/auth/

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