我正在开发一个支持Django的网站,其中我有三种类型的用户:
我的主要问题是如何在Django中拥有三种类型的用户,以便我可以有三种类型的登录?
我目前的解决方案是我有每种类型用户的三个模型(模型学生,模型教师,模型公司)。我还有三种不同的表格,允许公司,教师或学生注册。在我的视图中正确编译表单时,我手动(通过编码)创建用户,然后手动为相对模型创建对象,然后保存该对象。
主要问题是我创建的用户没有按类型区分:
class Azienda(models.Model):
nome=models.CharField(max_length=200)
sede=models.CharField(max_length=200)
pIva=models.CharField(max_length=30)
email = models.EmailField()
user = models.OneToOneField(User)
#company model, in models.py
#company form, in forms.py
class AziendaForm(forms.Form):
nome = forms.CharField(max_length=200)
sede = forms.CharField(max_length=200)
pIva = forms.CharField(max_length=30)
email = forms.EmailField()
user = forms.CharField(max_length=100)
password = forms.CharField(widget=forms.PasswordInput)
#view of company registration form
def registratiAziende(request):
if request.method=='POST':
form=AziendaForm(request.POST)
if form.is_valid():
form['nome'].value()
azienda=Azienda()
azienda.nome=form['nome'].value()
azienda.sede = form['sede'].value()
azienda.pIva = form['pIva'].value()
azienda.email=form['email'].value()
#I create a user user=User.objects.create_user(form['user'].value(),form['email'].value(),form['password'].value())
azienda.user=user
azienda.save()
#I save the company object
return redirect('myapp:index')
else:
form= AziendaForm()
return render(request, 'myapp/registratiAziende.html', {'form':form})
答案 0 :(得分:0)
这三种类型的用户在您的系统中包含相似的属性但角色不同。
只需在模型中添加属性role
,这样您就不需要维护三个模型。
答案 1 :(得分:0)
默认用户模型可以通过将此模型作为OneToOne字段添加到默认用户模型来扩展。但是,对于您的情况,您必须使用OneToOneField创建不同的模型作为自定义用户模型,然后在学生,教师和公司中使用此模型。
CHOICES = (('student', 'student'), ('teacher', 'teacher'), ('company', 'company'))
class CustomUser(models.Model):
user = models.OneToOneField(User)
user_type = models.CharField(max_length=30, choices=CHOICES)
然后,您可以在公司,学生,教师模型中使用此模型。
一个建议是不要为不同的模型使用公共字段。规范化数据库以删除冗余。