如何在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())