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

我做了一个自定义configuration文件模型,看起来像这样:

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 

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

改变这个:

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

对此:

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

完全在Django 1.5 中引入了AUTH_USER_MODEL设置,允许使用具有auth系统的自定义用户模型。

如果你正在编写一个应用程序,用于处理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())