使用django和postgresql设计多级用户登录系统的最佳方法是什么。用户详细信息包括主管(管理员)、学生、教师、员工等。这些不同类型的用户详细信息有不同的字段,我们无法更改这些字段。我们如何通过组合所有这些类型的用户来设计用户模型。
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"
请回答。
谢谢。
您可以用所有类似概要文件的类来扩展用户模型,因此,这将为您提供:
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默认的User模型所包含的信息感到不舒服,你也可以更进一步,用User模型来保存所有概要文件所共有的所有信息。