51

我制作了一个自定义配置文件模型,如下所示:

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 有关系,它要么没有安装,要么是抽象的。

我也试过:

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

但它给出了同样的错误。我错在哪里以及如何解决这个问题?

4

2 回答 2

63

正是在 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)
  • 有关更多详细信息,请参阅文档

如果您正在编写一个支持 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())
于 2014-09-19T11:37:38.343 回答
57

改变这个:

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

对此:

user = models.ForeignKey(User, unique=True)
于 2013-10-17T17:48:12.107 回答