/admin/accounts/user/1/change/ 'User' 对象的 AttributeError 没有属性 'profile'
Posted
技术标签:
【中文标题】/admin/accounts/user/1/change/ \'User\' 对象的 AttributeError 没有属性 \'profile\'【英文标题】:AttributeError at /admin/accounts/user/1/change/ 'User' object has no attribute 'profile'/admin/accounts/user/1/change/ 'User' 对象的 AttributeError 没有属性 'profile' 【发布时间】:2021-12-07 06:10:52 【问题描述】:我正在创建一个 API。当我创建新用户或编辑现有用户并保存时,我收到此错误 “/admin/accounts/user/1/change/ 处的 AttributeError “用户”对象没有属性“配置文件”
为了清楚起见,我有一个用户模型和一个配置文件模型,它与我的用户模型具有一对一的关系。
这是我的用户模型
artist_name = models.CharField(
max_length=255,
default='artist name',
unique=True
)
slug = models.SlugField(max_length=250, null=True, blank=True)
email = models.EmailField(max_length=300, unique=True)
active = models.BooleanField(default=True)
staff = models.BooleanField(default=False)
admin = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now_add=True)
我的个人资料模型
class Profile(models.Model):
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
related_name="user",
default=1
)
first_name = models.CharField(max_length=255, blank=True, null=True)
last_name = models.CharField(max_length=255, blank=True, null=True)
country = models.CharField(max_length=500, blank=True, null=True)
gender = models.CharField(max_length = 20, blank=True, null=True)
record_label = models.CharField(max_length=255, blank=True, null=True)
image = models.FileField()
还有我的信号
from .models import User, Profile
from django.dispatch import receiver
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()
我还应该提到,我还没有我的用户和个人资料的视图。但我认为这不会影响管理区域。 到目前为止,我已经在网上搜索过,但没有任何效果。
谢谢你的期待。
【问题讨论】:
为什么同一个信号有两个信号处理器?您可以将它们合并为一个,将instance.profile.save()
移动到第一个处理程序的else
【参考方案1】:
我建议您不要创建单独的用户模型,而是使用默认用户模型。请注意,您在 Profile 模型上需要的一些功能实际上存在于 User 模型中。在用户模型中,默认情况下您有名字、姓氏、电子邮件、用户名、密码 1 和密码 2,但如果您只使用您指定的用户模型,请按照步骤操作。因此,在您的个人资料模型中,您应指定的字段应如下所示:
from django.contrib.auth.models import User
from .models import User, Profile
from django.dispatch import receiver
from django.db.models.signals import post_save
class User(models.Model):
artist_name = models.CharField(max_length=255, default='artist name', unique=True)
slug = models.SlugField(max_length=250, null=True, blank=True)
email = models.EmailField(max_length=300, unique=True)
active = models.BooleanField(default=True)
staff = models.BooleanField(default=False)
admin = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now_add=True)
class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
country = models.CharField(max_length=500, blank=True, null=True)
gender = models.CharField(max_length = 20, blank=True, null=True)
record_label = models.CharField(max_length=255, blank=True, null=True)
image = models.ImageField()
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, *args, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_profile(sender, created, instance, **kwargs):
if not created:
instance.profile.save()
我希望这会有所帮助,如果它确实投票赞成这个答案并给出回应。
【讨论】:
以上是关于/admin/accounts/user/1/change/ 'User' 对象的 AttributeError 没有属性 'profile'的主要内容,如果未能解决你的问题,请参考以下文章