如何解决Django注册表根据用户类型分两步
我对 Django 很陌生,但现在我正在处理一个需要通用用户注册的项目,然后创建第二个表单以根据用户类型保存一些其他配置文件字段。我已经创建了这个:
模型.py
# Create your models here.
class User(AbstractBaseUser,PermissionsMixin):
USER_CHOICES = (
('galerist','galERISTA'),('collector','COLLECTOR'),('artist','ARTISTA'),('curator','CURADOR'),('general','GENERAL'),('press','PRENSA')
)
username = models.CharField(max_length=20,unique=True)
usertype = models.CharField(max_length = 20,choices = USER_CHOICES,default = 'normal')
image = models.ImageField(upload_to='media',blank=True,null=True)
email = models.EmailField()
nombre = models.CharField(max_length=30,blank=True)
apellidos = models.CharField(max_length=30,blank=True)
telefono = models.CharField(max_length=12,blank=True)
empresa = models.CharField(max_length=30,blank=True)
direccion = models.CharField(max_length=100,blank=True)
ciudad = models.CharField(max_length=15,blank=True)
pais = models.CharField(max_length=20,blank=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
USERNAME_FIELD = 'username'
required_FIELDS = ['email']
objects = UserManager()
def get_type(self):
return self.usertype
def get_full_name(self):
return self.nombre + ' ' + self.apellidos
def __str__(self):
return self.username
class CollectorProfile(models.Model):
VISITA_CHOICES = (
('1','1'),('2','2'),('3+','3+'),('Nunca','NUNCA')
)
COMPRA_ARTE_CHOICES = (
('1+','Más de una vez al año'),('1-2','Cada 1 - 2 años'),('3-5','Cada 3 – 5 años'),('1era','Estoy buscando comprar mi primera obra')
)
user = models.OnetoOneField(User,on_delete=models.CASCADE)
location = models.CharField(max_length=64)
company = models.CharField(max_length=64)
visita = models.CharField(max_length = 20,choices = VISITA_CHOICES,default = 'Nunca')
compra_arte = models.CharField(max_length = 20,choices = COMPRA_ARTE_CHOICES,default = '1era')
menciona_galerias = models.CharField(max_length=64)
menciona_artistas = models.CharField(max_length=64)
class CuratorProfile(models.Model):
VISITA_CHOICES = (
('1','NUNCA')
)
COMISARIO_CHOICES = (
('freelance','FREELANCE'),('otro','OTRO'),('no','NO SOY COMISARIO')
)
INSTITUCION_CHOICES = (
('muSEO','MUSEO'),('fundacion','FUNDACION'),('freelance','FREELANCE')
)
user = models.OnetoOneField(User,on_delete=models.CASCADE)
visita = models.CharField(max_length = 20,default = 'Nunca')
comisario = models.CharField(max_length = 20,choices = COMISARIO_CHOICES,default = 'no')
institucion = models.CharField(max_length = 20,choices = INSTITUCION_CHOICES,default = 'muSEO')
menciona_exposiciones = models.CharField(max_length=64)
def __str__(self):
return self.user
class galeristProfile(models.Model):
user = models.OnetoOneField(User,on_delete=models.CASCADE)
fundacion_galeria = models.CharField(max_length=64)
menciona_exposiciones = models.CharField(max_length=64)
menciona_artistas = models.CharField(max_length=64)
def __str__(self):
return self.user
class Pressprofile(models.Model):
user = models.OnetoOneField(User,on_delete=models.CASCADE)
medio = models.CharField(max_length=64)
def __str__(self):
return self.user
class ArtistProfile(models.Model):
user = models.OnetoOneField(User,on_delete=models.CASCADE)
art = models.CharField(max_length=64)
def __str__(self):
return self.user
class GeneralProfile(models.Model):
user = models.OnetoOneField(User,on_delete=models.CASCADE)
def __str__(self):
return self.user
forms.py
class RegistrationForm(UserCreationForm):
class Meta(UserCreationForm):
model = User
labels = {
"usertype": "Perfil"
}
fields = ('__all__')
class galeryForm(forms.Form):
class Meta(UserCreationForm):
model = galeristProfile
fields = ('__all__')
class PressForm(forms.Form):
class Meta:
model = Pressprofile
fields = ('__all__')
class ArtistForm(forms.Form):
class Meta:
model = ArtistProfile
fields = ('__all__')
class CuratorForm(forms.Form):
class Meta:
model = CuratorProfile
fields = ('__all__')
class CollectorForm(forms.Form):
class Meta:
model = CollectorProfile
fields = ('__all__')
views.py
class UserRegisterView(CreateView):
template_name = 'community/register.html'
form_class = CustomUserCreationForm
success_url = '/community/register/profile'
def ProfileRegisterView(request):
current_user = request.user
if request.method == 'POST':
if form.is_valid():
return HttpResponseRedirect('/')
else:
if current_user.usertype == 'galerist':
form_class = galeryForm
elif current_user.usertype == 'collector':
form_class = CollectorForm
elif current_user.usertype == 'artist':
form_class = ArtistForm
elif current_user.usertype == 'curator':
form_class = CuratorForm
elif current_user.usertype == 'press':
form_class = PressForm
elif current_user.usertype == 'general':
return redirect('/community/home')
return render(request,'community/register_profile',{'form': form_class})
urls.py
path('community/register/',views.UserRegisterView.as_view(),name='user_register'),path('community/register/profile',views.ProfileRegisterView,name='user_register_profile'),
第一个寄存器部分工作正常,但是当我转到第二部分时,它变成了“分配前引用的局部变量‘form_class’”的错误。我已经搜索了很多关于如何创建类似的东西,但我没有找到任何解决方案。我想要做的是根据用户类型注册一个配置文件。一些帮助会很棒。
非常感谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。