首页 > 解决方案 > Django auth 用户注册“用户”对象没有属性“配置文件”

问题描述

每次我注册新帐户时,我总是收到此错误“用户”对象没有属性“配置文件”,即使我复制了代码。我错过了什么?提前感谢谁会在这个问题上帮助我。

这是我的models.py

class Profile(models.Model):
    Pending_Request = [
        ('Active', 'Active'),
        ('Inactive', 'Inactive'),
    ]
    user = models.OneToOneField(User, related_name="profile", on_delete=models.CASCADE)
    bio = models.TextField(max_length=500, blank=True)
    Status = models.CharField(max_length=500, null=True, choices=Pending_Request, blank=True)
    def __str__(self):
        suser = '{0.user}'
        return suser.format(self)
@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
    instance.Profile.save()

我的意见.py

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            user.refresh_from_db()
            user.profile.bio = form.cleaned_data.get('bio')
            user.save()
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=user.username, password=raw_password)
            login(request, user)
            return redirect('Homepage')
    else:
        form = SignUpForm()
    return render(request, 'customAdmin/signup.html', {'form': form})

这是我的完整追溯

追溯:

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\User\Desktop\LastProject\OnlinePalengke\customAdmin\views.py" in signup
  21.             user = form.save()

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\contrib\auth\forms.py" in save
  121.             user.save()

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\contrib\auth\base_user.py" in save
  66.         super().save(*args, **kwargs)

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\base.py" in save
  741.                        force_update=force_update, update_fields=update_fields)

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\base.py" in save_base
  790.                 update_fields=update_fields, raw=raw, using=using,

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\dispatch\dispatcher.py" in send
  175.             for receiver in self._live_receivers(sender)

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\dispatch\dispatcher.py" in <listcomp>
  175.             for receiver in self._live_receivers(sender)

File "C:\Users\User\Desktop\LastProject\OnlinePalengke\customAdmin\models.py" in update_user_profile
  21.     instance.Profile.save()

Exception Type: AttributeError at /SignUpView/
Exception Value: 'User' object has no attribute 'Profile'

标签: django

解决方案


可能在您尝试访问的问题中未显示的某些代码中user.Profile,它应该是小写(user.profile),与您在 中设置的完全一样related_name

此外,如果您更改相关模型中的某些内容,要保存更改,您应该调用相关模型上的.save()方法。像这样:

user.profile.bio = form.cleaned_data.get('bio')
user.profile.save()

推荐阅读