Python 如何使用';用户';作为Django 1.5中的外键
我制作了一个自定义轮廓模型,如下所示:Python 如何使用';用户';作为Django 1.5中的外键,python,django,django-users,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.CharFi
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)
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())
但当我运行manage.py syncdb
时,我得到:
myapp.userprofile:“用户”与模型用户有关系,模型用户具有
未安装或是抽象的
我还尝试:
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
):
- 有关更多详细信息,请参阅
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)
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())
您的settings.py中安装的应用程序中是否有“django.contrib.auth”?这一项似乎有效:“user=models.OneToOneField(user,primary\u key=True)”。但是不确定有什么区别。区别在于对于OneToOneField,用户只能有一个配置文件(这可能是您想要的)。如果我们使用
OneToOneField
而不是带有unique
约束的ForeignKey
,不是更清楚吗。注意:如果您这样做,然后尝试扩展您的用户模型,创建自定义用户模型,您需要将其更改为settings.AUTH_USER_MODEL,正如Anton Strogonoff在他的-更正确的IMO-answer中所说,如果您的关系是一对一,则使用OneToOneField,并为Django的较新版本添加primary_key=True
,ForeignKey要求您在_delete=models.CASCADE或其他方面指定。我更改了代码以注意将版本号视为十进制数。毕竟,1.10版被认为高于1.5版,如果我们将它们视为十进制数字,这是不正确的。@Flimm对我来说很好,反正不喜欢与十进制一起跳舞。元组比较胜过它(可能稍微不那么直观,但它是有效的!)