web-dev-qa-db-ja.com

Django 1.5で 'User'を外部キーとして使用する方法

次のようなカスタムプロファイルモデルを作成しました。

from Django.db import models
from Django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.ForeignKey('User', unique=True)
    name = models.CharField(max_length=30)
    occupation = models.CharField(max_length=50)
    city = models.CharField(max_length=30)
    province = models.CharField(max_length=50)
    sex = models.CharField(max_length=1)

しかし、manage.py syncdb、私は得る:

myapp.userprofile: 'user'はモデルUserと関係があり、モデルUserはインストールされていないか、抽象的です。

私も試しました:

from Django.contrib.auth.models import BaseUserManager, AbstractUser

ただし、同じエラーが発生します。私が間違っている場所とこれを修正する方法は?

48
supermario

これを変更:

user = models.ForeignKey('User', unique=True)

これに:

user = models.ForeignKey(User, unique=True)
53
Captain Skyhawk

正確にDjango 1.5 AUTH_USER_MODEL設定 導入されました 。認証システムでカスタムユーザーモデルを使用できます。

Django 1.5〜1.10以降のプロジェクトで動作することを意図したアプリを作成している場合、これはユーザーモデルを参照する適切な方法です(現在はDjango.contrib.auth.models.User):

class UserProfile(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
  • 詳細については、 docs を参照してください。

Django 1.4もサポートしている再利用可能なアプリを書いている場合、おそらくDjangoバージョン、おそらくこのように:

import Django
from Django.conf import settings
from Django.db import models


def get_user_model_fk_ref():
    if Django.VERSION[:2] >= (1, 5):
        return settings.AUTH_USER_MODEL
    else:
        return 'auth.User'


class UserProfile(models.Model):
    user = models.ForeignKey(get_user_model_fk_ref())
60