sup*_*rio 50 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)
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时manage.py syncdb,我得到:
myapp.userprofile:'user'与模型User有关系,它没有安装或者是抽象的.
我也尝试过:
from django.contrib.auth.models import BaseUserManager, AbstractUser
Run Code Online (Sandbox Code Playgroud)
但它给出了同样的错误.哪里我错了,如何解决这个问题?
Ant*_*off 61
正是在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)
Run Code Online (Sandbox Code Playgroud)
如果您正在编写一个支持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())
Run Code Online (Sandbox Code Playgroud)
Cap*_*awk 56
改变这个:
user = models.ForeignKey('User', unique=True)
Run Code Online (Sandbox Code Playgroud)
对此:
user = models.ForeignKey(User, unique=True)
Run Code Online (Sandbox Code Playgroud)