如何正确扩展django用户模型

时间:2013-12-06 03:50:35

标签: django django-models django-authentication

我正在尝试使用其他字段和功能扩展默认的Django身份验证模型,所以我决定只使用扩展用户模型并编写自己的身份验证后端。

from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User


class MyUser(User):
    access_key = models.CharField(_('Acces Key'), max_length=64)

这是一个基本的代码,但在尝试syncdb时,我正在考虑一个谷歌不知道的奇怪错误:

CommandError: One or more models did not validate: core.sldcuser: 'user_ptr' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.

在我的settings.py中,我添加了我想要的内容:

AUTH_USER_MODEL = 'core.MyUser'

有没有人偶然发现这个错误?

或许我应该采用一对一的方式,或1t1与代理的混合使用?

1 个答案:

答案 0 :(得分:6)

您现在正在做的是创建User的子类,它是非抽象的。这意味着创建一个表ForeignKey,其user_ptr指向auth.User表上的主键。 但是,您通过设置AUTH_USER_MODEL所做的工作就是告诉django.contrib.auth不要创建该表,因为您将使用MyUser代替。可以理解的是,Django有点困惑:P

您需要做的是继承AbstractUserAbstractBaseUser

  • 如果您想要用户已经拥有的所有内容,并且只想添加更多字段
  • ,请使用AbstractUser
  • 如果您想从干净状态开始,只使用AbstractBaseUser,并且只继承用户的通用功能,但要实现自己的字段。

REF:

相关问题