2015-02-06 3 views
0

django 및 postgresql을 사용하여 다중 레벨 사용자 로그인 시스템을 설계하는 가장 좋은 방법은 무엇입니까? 사용자 세부 정보는 관리자 (Head) (관리자), 학생, 교사, 스태프 등입니다. 이러한 다양한 유형의 사용자 세부 정보는 서로 다른 필드를 가지며 해당 필드를 변경할 수 없습니다. 이러한 모든 유형의 사용자를 결합하여 사용자 모델을 설계하는 방법.장고 다중 레벨 사용자 처리

class Heads(models.Model): 
    gid  = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=50) 
    emp_code= models.CharField(max_length=50) 
    school = models.ForeignKey(SchoolDetails) 
    prdFrom = models.DateField() 
    contact_no=models.CharField(max_length=50) 
    email_id=models.CharField(max_length=50) 
    designation=models.CharField(max_length=50) 
    address =models.TextField() 
    def __unicode__(self): 
     return unicode(self.name) 
    class Meta: 
     db_table = u'heads' 
     verbose_name = "heads" 

class Student(models.Model): 
    gid  = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=50) 
    stud_code= models.CharField(max_length=50) 
    school = models.ForeignKey(SchoolDetails) 
    std = models.IntegerField() 
    division=models.CharField() 
    parents_email_id=models.CharField(max_length=50) 
    parents_contact_no=models.CharField(max_length=50) 
    addess =models.TextField() 
    def __unicode__(self): 
     return unicode(self.name) 
    class Meta: 
     db_table = u'students' 
     verbose_name = "students"  

class Teacher(models.Model): 
    gid  = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=50) 
    emp_code= models.CharField(max_length=50) 
    school = models.ForeignKey(SchoolDetails) 
    contact_no=models.CharField(max_length=50) 
    email_id=models.CharField(max_length=50) 
    address =models.TextField() 
    is_lead= models.CharField() 
    def __unicode__(self): 
     return unicode(self.name) 
    class Meta: 
     db_table = u'teacher' 
     verbose_name = "teacher"   

class Staff(models.Model): 
    gid  = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=50) 
    emp_code= models.CharField(max_length=50) 
    school = models.ForeignKey(SchoolDetails) 
    contact_no=models.CharField(max_length=50) 
    email_id=models.CharField(max_length=50) 
    address =models.TextField() 
    designation= models.CharField() 
    def __unicode__(self): 
     return unicode(self.name) 
    class Meta: 
     db_table = u'staff' 
     verbose_name = "staff"    

답변을주십시오.

감사합니다.

프로필 같은 클래스의 모든 당신 할 수 extend the User model
+0

코드를 입력하십시오. 고맙습니다. –

+0

친애하는 레고 스톰 트루퍼, 제 질문을 수정했습니다 ... – Anju

답변

0

, 즉 있도록이 당신을 줄 것이다 :

class Heads(models.Model): #<-- by convention you should use singular 'Head' 
    user = models.OneToOneField(User) 
    <other Head-specific fields not included in User> 

는 그래서 User 타입은 항상 동일하지만, 첨부 된 프로필이 다릅니다. 위의 예에서와 같이 OneToOneField를 사용하는 경우 backwards-relation에서 - 올바른 Profile -instance에서 어떤 것이 None이 아닌지 확인해야합니다.

물론 사용자가 속한 프로필에 따라 사용자 작성을위한 양식이나 방법이 달라질 수 있습니다.

Django의 기본 사용자 모델 정보가 마음에 들지 않으면 모든 프로파일에 공통된 모든 정보를 담기 위해 더 많은 단계와 substitute the User model을 진행할 수 있습니다.