86

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

それを修正する方法は?

OneToOneテーブル「auth_user」との関係を持つ新しいテーブル「workers」をdbに作成したいと思います。

4

4 に答える 4

209
from django.contrib.auth.models import User

あなたはモデルを見逃しました-そしてユーザーは大文字になります。

カスタムユーザーモデルを使用する場合は、次を使用する必要があります。

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

詳細については、ドキュメントをご覧ください。

Django 1.11で変更されました:

インポート時にget_user_model()を呼び出す機能が追加されました。

于 2012-10-16T19:09:57.830 に答える
76

カスタムユーザーモデルを使用している場合は、次の手順を実行して参照します。

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

または、外部キーまたは多対多の関係で使用する場合:

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

ドキュメント

于 2013-10-26T03:05:07.363 に答える
4

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
于 2017-06-10T04:51:51.203 に答える
2

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

ref:Django By Example Book

于 2016-02-06T20:44:53.167 に答える