【发布时间】:2018-01-17 14:20:26
【问题描述】:
我正在开发一个由 Django 支持的网站,其中我有三种类型的用户:
- 教师:可以添加培训阶段优惠,
- 学生:可以申请培训阶段的offer,
- 公司:还可以添加培训阶段优惠。
我的主要问题是如何在 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})
【问题讨论】:
-
为用户创建一个表单并为用户的角色添加一个新字段,基于此您可以在教师、学生或公司中创建新条目。或者,您可以扩展 Django 的默认
User模型,在其中添加一个新字段role,通过它您可以区分。