如何在Django 1.5中使用'User'作为外键

时间:2013-10-17 17:44:26

标签: python django django-users

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

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

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

2 个答案:

答案 0 :(得分:59)

正好在Django 1.5中AUTH_USER_MODEL设置was introduced,允许使用带有auth系统的自定义用户模型。

如果您正在编写一个打算在Django 1.5到1.10及更高版本上使用项目的应用程序,这是引用用户模型的正确方法(现在可以与{{1}不同}):

django.contrib.auth.models.User
  • 有关详细信息,请参阅docs

如果您正在编写支持Django 1.4的可重用应用程序,那么您应该通过检查Django版本来确定使用的引用,可能是这样的:

class UserProfile(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)

答案 1 :(得分:52)

改变这个:

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

到此:

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