将Mulit用户个人资料链接在一起

时间:2018-08-01 20:17:59

标签: python django

因此,我有这个帐户,其中有两种类型的用户示例:实习生和HR主管。所以我的模型是

class User(AbstractUser):
   is_intern = models.BooleanField(default=True)

class InternProfile(models.Model):
   user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, 
        related_name='intern_profile')
   bio = models.CharField(max_length=30, blank=True)
   location = models.CharField(max_length=30, blank=True)
   SuperVisor= models.ForeignKey(HRProfile, null=True, 
                related_name='employee')

class HRProfile(models.Model):
   user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, related_name='hr_profile')
   company_name = models.CharField(max_length=100, blank=True)
   website = models.CharField(max_length=100, blank=True)

现在假设我有两个人力资源经理,分别是爱丽丝和鲍勃。爱丽丝(Alice)和鲍勃(Bob)都有三个实习生,可以说,萨姆(Sam),大卫(David),凯蒂(Katty)在爱丽丝(Alice)和德雷克(Drake)下工作,泰勒(Taylor)和尼克(Nik)在鲍勃(Bob)下工作。

现在,我想让Bob只看到他的实习生,而Alice只能看到她的实习生,所以我是新来的人,正在学习django与此相关的任何建议,因为我无法找到解决方法。 谢谢

1 个答案:

答案 0 :(得分:0)

您可以在一个模型中拥有一切

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    supervisor = models.ForeignKey(
        'self', null=True, blank=True, on_delete=models.SET_NULL,
        related_name='interns')

    def is_supervisor(self):
        if not self.supervisor:
            return True
        return False

    def is_intern(self):
        if not self.supervisor:
            return False
        return True

根据您的观点或任何职能,您只需检查用户是否为主管,然后查询其实习生。

if obj.is_supervisor():
    interns = obj.interns.all()

if obj.is_intern():
    supervisor = obj.supervisor