如何应对修改AUTH_USER_MODEL后引发的难题?

2026-05-24 22:431阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计687个文字,预计阅读时间需要3分钟。

如何应对修改AUTH_USER_MODEL后引发的难题?

使用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.创建迁移文件:

如何应对修改AUTH_USER_MODEL后引发的难题?

运行以下命令创建一个新的迁移文件: bash python manage.py makemigrations admin

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分钟。

如何应对修改AUTH_USER_MODEL后引发的难题?

使用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.创建迁移文件:

如何应对修改AUTH_USER_MODEL后引发的难题?

运行以下命令创建一个新的迁移文件: bash python manage.py makemigrations admin

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后出现的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。

标签: