django-allauth差异用户类型的多个注册表单 [英] django-allauth multiple signup form for difference user type
本文介绍了django-allauth差异用户类型的多个注册表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经搜索了stackoverflow中的所有问题。但是,还没有人清楚地回答这个问题。
I have already searched all the questions in stackoverflow. However, there is no one clearly answered this question yet.
我的应用程序包含2个用户类型,我添加了2个用户配置文件。
任何人都可以告诉我如何制作2个注册表格?
因为我是django的新手,所以我已经尝试了一些解决方案,但是都没有用...
My application contain 2 user types, I added 2 user profiles. Anyone can show me how to make 2 signup form? Since I'm new to django, I have already tried a few solutions but none of them is work...
我正在使用python3.4 django 2.0.2。
I'm using python3.4 with django 2.0.2.
谢谢!
我以前尝试过这些……
#model.py
class SupplierProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
#bio = models.TextField(max_length=500, blank=True)
nationality = CountryField()
company = models.CharField(max_length=50, unique=True, null=True, blank=True, default=None)
phone = models.CharField(max_length=50, unique=True, null=True, blank=True, default=None)
skype = models.CharField(max_length=50, unique=True, null=True, blank=True, default=None)
address = models.CharField(max_length=50, unique=True, null=True, blank=True, default=None)
def __str__(self):
return self.user.email
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
SupplierProfile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.supplierprofile.save()
#form.py
class SupplierSignUpForm(SignupForm):
first_name = forms.CharField(max_length=30, label='First name', required=False)
last_name = forms.CharField(max_length=30, label='Last name', required=False)
company = forms.CharField(max_length=50, required=True, strip=True)
phone = forms.CharField(max_length=50, required=True, strip=True)
skype = forms.CharField(max_length=50, required=True, strip=True)
address = forms.CharField(max_length=50, required=True, strip=True)
def save(self, request):
user = super(SupplierSignUpForm, self).save(request)
advertiser_user.save()
user.account_type = 1
user.save()
return user
#view.py
class SupplierSignUp(SignupView):
template_name = 'accounts/signup_supplier.html'
form_class = SupplierSignUpForm
redirect_field_name = 'next'
view_name = 'supplier_sign_up'
def get_context_data(self, **kwargs):
ret = super(SupplierSignUp, self).get_context_data(**kwargs)
ret.update(self.kwargs)
return ret
推荐答案
尝试使用此模型通用配置文件(如果两个模型的选择相同)
try this model which will make the common profile (If choices are same for both model)
模型
class Profile(models.Model):
TYPE_CHOICES = (
('SUP', 'Supplier'),
('DIS', 'Distributer'),
)
type = models.CharField(max_length=3, choices=TYPE_CHOICES)
user = models.OneToOneField(User, on_delete=models.CASCADE)
#bio = models.TextField(max_length=500, blank=True)
nationality = CountryField()
company = models.CharField(max_length=50, unique=True, null=True, blank=True, default=None)
phone = models.CharField(max_length=50, unique=True, null=True, blank=True, default=None)
skype = models.CharField(max_length=50, unique=True, null=True, blank=True, default=None)
address = models.CharField(max_length=50, unique=True, null=True, blank=True, default=None)
表格
class SignUpForm(SignupForm):
type = forms.CharField(
max_length=3,
widget=forms.Select(choices=TYPE_CHOICES ),
)
first_name = forms.CharField(max_length=30, label='First name', required=False)
last_name = forms.CharField(max_length=30, label='Last name', required=False)
company = forms.CharField(max_length=50, required=True, strip=True)
phone = forms.CharField(max_length=50, required=True, strip=True)
skype = forms.CharField(max_length=50, required=True, strip=True)
address = forms.CharField(max_length=50, required=True, strip=True)
def save(self, request):
user = super(SignUpForm, self).save(request)
advertiser_user.save()
user.account_type = 1
user.save()
return user
这篇关于django-allauth差异用户类型的多个注册表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文