": "Profile.user"必须是 "User"实例-6ren"> ": "Profile.user"必须是 "User"实例-我正在尝试使用 Django 创建注册表单。我在提交表单时收到此错误。 这就是我所做的。 models.py from django.db import models from django.cont-6ren">
gpt4 book ai didi

python - Django:无法分配 "": "Profile.user"必须是 "User"实例

转载 作者:行者123 更新时间:2023-12-01 09:19:21 25 4
gpt4 key购买 nike

我正在尝试使用 Django 创建注册表单。我在提交表单时收到此错误。

这就是我所做的。

models.py

from django.db import models 
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

class Profile(models.Model):
profile_ID = models.IntegerField(primary_key=True)
user = models.OneToOneField(User, on_delete=models.CASCADE)
avatar = models.ImageField(upload_to='img/', default='img/none/default-avatar.png')

def updateUserProfile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
instance.profile.save()

post_save.connect(updateUserProfile, dispatch_uid="app_models_updateUserProfile")

views.py

from django.shortcuts import render, redirect
from django.views import View
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import UserCreationForm
from .models import Profile
# Create your views here.

class SignUpView(View):
templateName = 'auth/signup.html'

def get(self, request, *arg, **kwargs):
form = UserCreationForm()
return render(request, self.templateName, {'form': form})

def post(self, request, *arg, **kwargs):
form = UserCreationForm(request.POST, request.user)
if form.is_valid():
user = form.save()
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password)
login(request, user)
return redirect('/')
return render(request, self.templateName, {'form': form})

从错误回溯中,我可以看到错误是因为一次发送了两个注册请求。这不应该发生,因为我用过这个,

post_save.connect(updateUserProfile, dispatch_uid="app_models_updateUserProfile")

这是回溯,

Error traceback #1

Error traceback #2

我想我做了一些愚蠢的事情。请帮忙!

最佳答案

您已将信号处理程序连接到所有保存后信号。因此,当您调用 instance.profile.save() 时,它会在配置文件本身上再次调用,然后尝试将其分配为另一个新创建的配置文件中的用户属性。

您应该将其限制为仅在用户保存后调用:

post_save.connect(updateUserProfile, sender=User, ...)

(不确定为什么指定了dispatch_uid;通常不需要它。)

关于python - Django:无法分配 "<Profile: Profile object (None)>": "Profile.user"必须是 "User"实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50929110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com