如何应对修改AUTH_USER_MODEL后引发的难题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计687个文字,预计阅读时间需要3分钟。
使用Django的`AbstractUser`扩展后,修改`AUTH_USER_MODEL='users.UserProfile'`属性后,进行数据库迁移时出现以下错误:
ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'user'
原因分析:这个错误通常是因为`admin`应用中的`LogEntry`模型使用了`user`字段,而`user`字段被声明为对`AbstractUser`的懒引用。在更改`AUTH_USER_MODEL`后,Django无法找到新的`User`模型,因此导致错误。
解决方案:
1.创建迁移文件:
2. 编辑迁移文件: 打开生成的迁移文件(例如`0001_initial.py`),找到`LogEntry`模型中的`user`字段。将字段声明改为直接引用新的`User`模型,而不是使用懒引用。
示例: python from django.contrib.auth.models import AbstractUser
class LogEntry(models.Model): user=models.ForeignKey(AbstractUser, on_delete=models.CASCADE) # ... 其他字段 ...
修改为: python from users.models import UserProfile
class LogEntry(models.Model): user=models.ForeignKey(UserProfile, on_delete=models.CASCADE) # ... 其他字段 ...
3. 应用迁移: 运行以下命令应用迁移: bash python manage.py migrate admin
这样,数据库迁移应该会成功完成,而不会出现上述错误。
使用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就可以了
补充知识:自定义userprofile覆盖默认user表
一、创建users app
startapp users
二、创建userprofile模型
from django.db import models from django.contrib.auth.models import AbstractUser class UserProfile(AbstractUser): nick_name = models.CharField(max_length=50,verbose_name=u"昵称", default="") birday = models.DateField(verbose_name=u"生日", null=True, blank=True) gender = models.CharField(max_length=5, choices=(("male",u"男"),("female",u"女")), default="female") address = models.CharField(max_length=100, default=u"") mobile = models.CharField(max_length=11, null=True, blank=True) image = models.ImageField(upload_to="image/%Y/%m", default=u"image/default.png", max_length=100) class Meta: verbose_name = "用户信息" verbose_name_plural = verbose_name def __str__(self): return self.username
三、在setting.py中更改用户模型
+
AUTH_USER_MODEL = "users.UserProfile"
以上这篇解决更改AUTH_USER_MODEL后出现的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。
本文共计687个文字,预计阅读时间需要3分钟。
使用Django的`AbstractUser`扩展后,修改`AUTH_USER_MODEL='users.UserProfile'`属性后,进行数据库迁移时出现以下错误:
ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'user'
原因分析:这个错误通常是因为`admin`应用中的`LogEntry`模型使用了`user`字段,而`user`字段被声明为对`AbstractUser`的懒引用。在更改`AUTH_USER_MODEL`后,Django无法找到新的`User`模型,因此导致错误。
解决方案:
1.创建迁移文件:
2. 编辑迁移文件: 打开生成的迁移文件(例如`0001_initial.py`),找到`LogEntry`模型中的`user`字段。将字段声明改为直接引用新的`User`模型,而不是使用懒引用。
示例: python from django.contrib.auth.models import AbstractUser
class LogEntry(models.Model): user=models.ForeignKey(AbstractUser, on_delete=models.CASCADE) # ... 其他字段 ...
修改为: python from users.models import UserProfile
class LogEntry(models.Model): user=models.ForeignKey(UserProfile, on_delete=models.CASCADE) # ... 其他字段 ...
3. 应用迁移: 运行以下命令应用迁移: bash python manage.py migrate admin
这样,数据库迁移应该会成功完成,而不会出现上述错误。
使用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就可以了
补充知识:自定义userprofile覆盖默认user表
一、创建users app
startapp users
二、创建userprofile模型
from django.db import models from django.contrib.auth.models import AbstractUser class UserProfile(AbstractUser): nick_name = models.CharField(max_length=50,verbose_name=u"昵称", default="") birday = models.DateField(verbose_name=u"生日", null=True, blank=True) gender = models.CharField(max_length=5, choices=(("male",u"男"),("female",u"女")), default="female") address = models.CharField(max_length=100, default=u"") mobile = models.CharField(max_length=11, null=True, blank=True) image = models.ImageField(upload_to="image/%Y/%m", default=u"image/default.png", max_length=100) class Meta: verbose_name = "用户信息" verbose_name_plural = verbose_name def __str__(self): return self.username
三、在setting.py中更改用户模型
+
AUTH_USER_MODEL = "users.UserProfile"
以上这篇解决更改AUTH_USER_MODEL后出现的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。

