2017-08-09 29 views
0

我正在開發一個Django驅動的網站中,我有三個類型的用戶:如何在Django中擁有3種類型的用戶?

  • 教師:可以增加訓練階段報價,
  • 生:可以申請一個訓練階段的報價,
  • 公司:也可以添加培訓階段優惠。

主要問題是如何有三種類型在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

爲用戶創建單個表單併爲該用戶的角色添加一個新字段,根據該字段您可以在教師,學生或公司中創建新條目。或者,您可以擴展Django的默認'User'模型以在其中添加一個新的字段'角色',通過它您可以區分。 –

回答

0

這三種類型的用戶包含您的系統相似的屬性,但不同的角色。

只是在你的模型添加屬性role,這樣你就不需要維護三種模式。

+0

其實我在我的3個模型中有一些共同的屬性,但仍然有排他性屬性。 –

+0

您可以在模型'User'中定義這些通用屬性,並定義從'User'繼承的'Teachers \ Students \ Companies'。 –

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) 

然後,您可以在您的公司,學生,教師模型中使用此模型。

一個建議是不會爲不同的模型使用通用字段。標準化您的數據庫以消除冗餘。

+0

其實我在我的3個模型中有一些共同的屬性,但仍然有排他性屬性。 –

相關問題