更改AUTH_USER_MODEL后出现的问题

  使用django自带的 AbstractUser 扩展之后,更改AUTH_USER_MODEL = 'users.UserProfile'属性后,进行数据库迁移时,出现如下报错:

ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'user.patient', but app 'users' isn't installed.

 通过如下两种方式注册app:

单独设置时,报错情况未变。

取消注释,则报unique错误,app必须唯一

后经过仔细查询,找到解决办法,并尝试解决成功:

找到自己的/python3X/lib/site-packages/django/contrib/admin/migrations文件夹,把里面除了__init__.py的所有文件,全部删了再makemigrations就可以了,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django中有一个内置的User模型,但是如果需要添加一些额外的字段或方法,可以通过扩展User模型来实现。 方法1:使用AbstractBaseUser和BaseUserManager 可以通过继承AbstractBaseUser和BaseUserManager来创建自定义User模型,具体步骤如下: 1. 创建一个新的app ``` python manage.py startapp accounts ``` 2. 在models.py中创建自定义User模型 ```python from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin from django.db import models class CustomUserManager(BaseUserManager): def create_user(self, email, password=None, **extra_fields): if not email: raise ValueError('The Email field must be set') email = self.normalize_email(email) user = self.model(email=email, **extra_fields) user.set_password(password) user.save() return user def create_superuser(self, email, password=None, **extra_fields): extra_fields.setdefault('is_staff', True) extra_fields.setdefault('is_superuser', True) return self.create_user(email, password, **extra_fields) class CustomUser(AbstractBaseUser, PermissionsMixin): email = models.EmailField(unique=True) name = models.CharField(max_length=30, blank=True) is_staff = models.BooleanField(default=False) is_active = models.BooleanField(default=True) date_joined = models.DateTimeField(auto_now_add=True) objects = CustomUserManager() USERNAME_FIELD = 'email' REQUIRED_FIELDS = [] def __str__(self): return self.email def get_full_name(self): return self.name def get_short_name(self): return self.name ``` 3. 修改setting.py中的AUTH_USER_MODEL ```python AUTH_USER_MODEL = 'accounts.CustomUser' ``` 4. 执行数据库迁移 ``` python manage.py makemigrations python manage.py migrate ``` 5. 创建超级用户 ``` python manage.py createsuperuser ``` 方法2:使用AbstractUser Django还提供了一个AbstractUser模型,可以通过继承该模型来扩展User模型。 具体步骤如下: 1. 创建一个新的app ``` python manage.py startapp accounts ``` 2. 在models.py中创建自定义User模型 ```python from django.contrib.auth.models import AbstractUser class CustomUser(AbstractUser): name = models.CharField(max_length=30, blank=True) ``` 3. 修改setting.py中的AUTH_USER_MODEL ```python AUTH_USER_MODEL = 'accounts.CustomUser' ``` 4. 执行数据库迁移 ``` python manage.py makemigrations python manage.py migrate ``` 5. 创建超级用户 ``` python manage.py createsuperuser ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值