Python 在django中将表单对象传递给会话变量

Python 在django中将表单对象传递给会话变量,python,django,authentication,Python,Django,Authentication,目前,我正在django项目中制作一个电子邮件确认系统,我的系统如下: 当新用户创建帐户时,将为该帐户创建随机生成的代码。然后,用户将被重定向到确认页面,在该页面中,他们将在收到的电子邮件中输入为他们生成的代码。我的问题是,当我尝试将来自注册的form对象放入会话变量中以在确认页面上使用(以便将表单保存到数据库)时,我得到一个错误,即RegistrationForm对象(在forms.py中创建)不可JSON序列化。任何帮助都将不胜感激,我觉得这是一个简单的解决办法 # forms.py: fr

目前,我正在django项目中制作一个电子邮件确认系统,我的系统如下:

当新用户创建帐户时,将为该帐户创建随机生成的代码。然后,用户将被重定向到确认页面,在该页面中,他们将在收到的电子邮件中输入为他们生成的代码。我的问题是,当我尝试将来自注册的form对象放入会话变量中以在确认页面上使用(以便将表单保存到数据库)时,我得到一个错误,即RegistrationForm对象(在forms.py中创建)不可JSON序列化。任何帮助都将不胜感激,我觉得这是一个简单的解决办法

# forms.py:
from django import forms
from django.contrib.auth.forms import UserCreationForm


class RegistrationForm(UserCreationForm):
    email = forms.EmailField(max_length=60, help_text="Required add a valid email address.")

    class Meta:
        model = Account
        fields = ("email", "username", "restaurant_name", "password1", "password2")
我知道我需要某种序列化程序类,但我不知道如何在这种情况下创建或应用它。提前感谢:)

# views.py
def registration(request):
    context = {}

    if request.POST:
        form = RegistrationForm(request.POST)

        if form.is_valid():
            email = form.cleaned_data.get("email")
            
            # setting all the necessary variables for the session variable
            request.session["account_data"] = {
                "email": form.cleaned_data.get("email"),
                "code": generate_account_code(),
                "form": form,
            }

            # confirm is the name of the view which is meant to take in the confirmation code
            return redirect("confirm") 

        else:
            context["registration_form"] = form
    
    else:
        form = RegistrationForm()
        context["registration_form"] = form

    return render(request, "account/create_account.html", context)

def confirm(request):
    context= {}
    print(request.session["account_data"]["code"])
    if request.method == "POST":
        form = ConfirmForm(request.POST)

        if form.is_valid():
            form_code = form.cleaned_data.get("code")
            
            if request.session["account_data"]["code"] == form_code:
                account_data = request.session.get("account_data")

                account_data["form"].save()

                account = authenticate(request, email=account_data["email"], password=account_data["password"])
                Account.objects.filter(email=email).update(is_active=True)

                login(request, account)
                return redirect("dashboard")
            else:
                context["form"] = ConfirmForm()

        else:
            context["form"] = ConfirmForm(request.POST)

    else:
        context["form"] = ConfirmForm()
    
    return render(request, "account/confirm.html", context)