首页 > 解决方案 > 我在注册表单中的 /accounts/register/ 处有一个 ValueError

问题描述

这是一个views.py检查注册表单验证的方法,但是当我在服务器中注册一个表单时,我在 /accounts/register/ 找到了一个 ValueError

class UserFormView(View):
    form_class = UserForm
    template_name = 'registration/register.html'

    # display blank form
    def get(self, request):
        form = self.form_class(None)
        return render(request, self.template_name, {'form': form})
    
    # process form data
    def post(self, request):
        form = self.form_class(request.POST)

        if form.is_valid():
            user = form.save(commit=True)
            
            # cleaned (normalized) data
            email = form.cleaned_data['email']
            first_name = form.cleaned_data['first_name']
            last_name = form.cleaned_data['last_name']
            date_of_birth = form.cleaned_data['date_of_birth']
            phone_number = form.cleaned_data['phone_number']
            address = form.cleaned_data['address']
            password = form.cleaned_data['password']
            

            user.set_password(password)

            user.save()

            # returns user objects if credentials are correct

            user = authenticate(email=email, password=password)
            
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return redirect('accounts:home')

            return render(request, self.template_name, {'form': form.as_p})

标签: djangodjango-viewsregistrationvalueerror

解决方案


原因是您试图在数据库表中保存空白数据。所以而不是这样做

if form.is_valid():
    user = form.save(commit=True) # this will try to save your data in db

尝试这个:

if form.is_valid():
    user = form.save(commit=False) # return an object that hasn’t yet been saved to the database

您可以在 django 的文档中阅读有关save()方法的更多信息。


推荐阅读