Django:如何在会话中动态存储用户数据?



我正在尝试为不同类型的用户创建不同的django-allauth注册表单。所以不同的用户类型有不同的表单。一旦用户选择了一种用户类型(例如:"我想注册为供应商"),他们应该被重定向到一个不同的表单,在那里他们将完成其他注册和配置文件的详细信息,然后通过电子邮件确认和登录。我有一个django-allauth注册形式工作,但不是多个。目前,我有一个通用的注册形式分配给用户/帐户/注册/,但我也想要一个特定的供应商注册形式分配给用户/帐户/signup_vendor/。我已经试过了我能想到的一切。

我找到的最好的解决方案,虽然不是理想的,是由django-allauth作者提供的,声明:

"有多种方法可以做到这一点。你可以存储你想要的用户在会话中键入,并动态构造表单字段视情况而定。或者,你也可以允许用户自己去做随时只需添加"配置文件类型"即可。到签名处的形式。基本上,注册表单中的字段必须是所有可能字段的并集,也许你想添加一些Javascript根据类型动态显示/隐藏一些字段选择。我推荐一种方法,用户可以自己弥补在任何阶段都要注意配置文件的类型。链接到线程

我是新的django,新的web应用程序开发。我怎么能最好地存储用户类型的数据到会话,然后动态构建表单字段取决于?

目前,这是我有:settings.py

#assign to custom form
ACCOUNT_SIGNUP_FORM_CLASS = 'users.forms.GeneralSignupForm'

users.models.py

class User(AbstractUser):
class UserTypes(models.TextChoices):
....
....
class VendorUser(models.Model):
userinfo = models.OneToOneField(User, on_delete=models.CASCADE)

users.forms.py

class GeneralSignupForm(forms.Form):
first_name = forms.CharField(max_length=255, help_text="Your first name")
last_name = forms.CharField(max_length=150, help_text="Your last name")
phone = forms.CharField(max_length=150)
def signup(self, request, user):
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.phone = self.cleaned_data['phone']
user.save()

users.views.py

class GeneralSignupView(SignupView):
template_name = 'account/signup.html'
form_class = GeneralSignupForm
redirect_field_name = 'next'
view_name = 'signup'
success_url = None
def get_context_data(self, **kwargs):
data = super(GeneralSignupView, self).get_context_data(**kwargs)
data.update(self.kwargs)
return data

users.urls.py

path('accounts/signup/', views.GeneralSignupView.as_view(), name='signup'),

urls.py

path('users/', include('users.urls')),
url(r'^accounts/', include('allauth.urls')),

如何创建一个模型并使用ForeignKey将其链接到用户模型?例如,您可以将您的模型命名为"type",然后与user.type

一起使用它。

最新更新