我正在尝试使用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")这是回溯,
我想我做了件傻事。请帮帮我!
发布于 2018-06-19 13:09:23
您已经将信号处理程序连接到所有保存后信号。因此,当您调用instance.profile.save()时,它将再次调用配置文件本身,然后尝试将它指定为另一个新创建的配置文件中的用户属性。
您应该将其限制为仅在用户的后置保存时调用:
post_save.connect(updateUserProfile, sender=User, ...)(不知道为什么指定了dispatch_uid;通常不需要这样做。)
https://stackoverflow.com/questions/50929110
复制相似问题