我制作了一个如下所示的自定义配置文件模型:
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' has a relation with model User, which has either not been installed or is abstract.
我也试过了:
from django.contrib.auth.models import BaseUserManager, AbstractUser
但它给出了同样的错误。我错在哪里以及如何解决这个问题?
最佳答案
正是在 Django 1.5 中,AUTH_USER_MODEL
设置 was introduced , 允许使用带有身份验证系统的自定义用户模型。
如果您正在编写一个旨在与 Django 1.5 到 1.10 及更高版本上的项目一起使用的应用程序,那么这是引用用户模型的正确方法(现在可以不同于 django.contrib.auth.models .用户
):
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())
关于python - 如何在 Django 1.5 中使用 'User' 作为外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19433630/