2015-02-06 3 views
0

Каков наилучший способ разработки системы входа в систему с несколькими уровнями с использованием django и postgresql. Детали пользователя - это руководитель (администратор), студенты, преподаватели, сотрудники и т. Д. Эти различные типы пользовательских данных имеют разные поля, и мы не можем изменять эти поля. Как мы разрабатываем пользовательскую модель, объединяя все эти типы пользователей.Django для управления несколькими уровнями

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"    

Просьба дать ответы.

Thank you.

+0

Просьба указать код. Спасибо. –

+0

Дорогой Лего Стормтропр, я редактировал мой вопрос ... – Anju

ответ

0

Вы могли extend the User model все ваши профилегибочных как классы, так то это даст вам:

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, как в примере, в обратном отношении вам нужно будет только проверить, какой из них не принадлежит None, от User - до значения Profile.

Конечно, у вас, вероятно, были бы разные формы или методы для создания Пользователя в зависимости от того, к какому профилю принадлежит пользователь.

Если вы не чувствуете себя комфортно с информацией, хранящейся в модели пользователя по умолчанию Django, вы также можете пойти дальше и substitute the User model, чтобы хранить всю информацию, общую для всех профилей.

Смежные вопросы