Django ValueError[无法创建用户,因为数据未验证]

2024-04-25 04:35:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用了基于this的扩展用户模型教程。什么时候我提交登记表这个错误发生。这在我使用的is\u active()和代码中的is\u active两个时间都显示错误。
如何解决此错误?
Error
registration form
new error
这是我的密码:

你知道吗型号.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):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    full_name = models.CharField(max_length=256, blank=False)
    codeforces_id = models.CharField(max_length=256, blank=False)
    Uva_Id = models.CharField(max_length=256, blank=False)
    #receiver(post_save, sender=User)
    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            Profile.objects.create(user=instance)

    #receiver(post_save, sender=User)
    def save_user_profile(sender, instance, **kwargs):
        instance.profile.save()

你知道吗视图.py

from django.http import HttpResponse 
from django.shortcuts import render,redirect
from django.contrib.auth import authenticate,login
from django.views import generic
from django.views.generic import View
from .forms import UserForm,ProfileForm

class UserFormView(View):
    user_form_class = UserForm
    profile_form_class= ProfileForm
    #display a blank form
    def get(self , request):
         user_form = self.user_form_class(None)
         profile_form = self.profile_form_class(None)
         return render(request, 'website/registration_form.html',{
            'user_form':user_form,
            'profile_form':profile_form
            })
    #process form data
    def post(self, request):
        user_form = self.user_form_class(request.POST)
        profile_form = self.profile_form_class(request.POST)
        user= user_form.save(commit=  False)
        if user_form.is_valid() and profile_form.is_valid():
            password= user_form.cleaned_data['password']
            username = user_form.cleaned_data['username']
            user.set_password(password)

            user_form.save()
            profile_form.save()

            # auto login 
            user = authenticate(username =username, password = password)

            if user is not None:
                if user.is_active():
                    login(request,user)
                    return redirect('website:index')
        return render(request, 'website/registration_form.html',{
            'user_form':user_form,
            'profile_form':profile_form
            })

Tags: djangofromimportselfformismodelsrequest
1条回答
网友
1楼 · 发布于 2024-04-25 04:35:29

您在验证前保存了表单。 在if语句中添加user = user_form.save(commit= False)

def post(self, request):
        user_form = UserForm(request.POST, instance=request.user)
        profile_form = ProfileForm(request.POST, instance=request.user.profile)

        if user_form.is_valid() and profile_form.is_valid():
            user= user_form.save(commit=  False)
            password= user_form.cleaned_data['password']
            username = user_form.cleaned_data['username']
            user.set_password(password)

            user.save() # You can update user object like this
            profile_form.save()

            # auto login 
            user = authenticate(username =username, password = password)

            if user is not None:
                if user.is_active():
                    login(request,user)
                    return redirect('website:index')
        return render(request, 'website/registration_form.html',{
            'user_form':user_form,
            'profile_form':profile_form
            })

第二个错误是因为调用user.save()时它会自动执行模型中定义的信号。但是你评论了@receiver(post_save, sender=User)。这是至关重要的,取消它的注释。你知道吗

相关问题 更多 >