根据我之前question的答案,我编辑了django-registration模块,并进行了以下修改:
myapp/models.py
中的:
from django.contrib.auth.models import UserManager
from django.contrib.auth.models import AbstractUser
class AccountManager(UserManager):
def create_user(self, email, password=None, **kwargs):
if not email:
raise ValueError('Users must have a valid email address.')
if not kwargs.get('username'):
raise ValueError('Users must have a valid username.')
account = self.model(
email=self.normalize_email(email),
username=kwargs.get('username'),
#year_of_birth = kwargs.get('year_of_birth'),
#MODEL = kwargs.get('MODEL_NAME'),
)
account.set_password(password)
account.save()
return account
def create_superuser(self, email, password, **kwargs):
account = self.create_user(email, password, **kwargs)
account.is_staff = True
account.is_superuser = True
account.save()
return account
class Account(AbstractUser):
#email = models.EmailField(unique=True)
points = models.FloatField(default = 100.0)
#ADD YOUR MODELS HERE
objects = AccountManager()
def __str__(self):
return "Account: "+self.username
和myproject/settings.py
:
AUTH_USER_MODEL = 'myapp.Account'
现在应用程序的其余部分工作(即引用Account
,它也有User
模型的基本字段。但是,django-registration
模块本身现在不起作用。当我发送新的注册表(包含用户名,电子邮件和密码)时,我收到错误:
OperationalError at /accounts/register/
no such table: auth_user
我尝试了makemigrations
和migrate
(以及--fake
和--fake-initial
个参数)的很多组合但是(我猜)auth
表是没有使用新设置初始化。
如何解决此问题,以便我可以继续使用新的Account
模式进行注册,同时不会损害默认的auth
模块的User
模型?
感谢您的帮助,
当我试图在shell中看到用户时,我收到了这个错误,这让事情变得更加清晰:
>>> from django.contrib.auth.models import User
>>> users = User.objects.all()
AttributeError: Manager isn't available; User has been swapped for 'myapp.Account'
所以我的新模型Account
似乎覆盖了默认的User
模型。如果是这样,为什么注册模块会查找auth_user
表? settings.py
中的修改是否旨在解决此问题?
答案 0 :(得分:1)
如果已应用该应用的迁移,则无法为引用该应用的任何应用交换用户模型。尝试通过创建新数据库,在其上重新应用迁移,然后从旧数据库移动数据来重新创建数据库