Django Custom Manager(获取Boss的下属)

时间:2018-12-04 20:23:44

标签: python django

我有两个模型。

老板:

class Boss(models.Model):
    name = models.CharField(max_length=200, blank=False)
    company = models.CharField(max_length=200, blank=False)

和员工:

class Employee(models.Model):
    boss = models.ForeignKey(Boss, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, blank=False)
    company = models.CharField(max_length=200, blank=False)

我想创建一个可以吸引Boss员工的自定义经理,它可能像这样工作:

b1 = Boss.objects.first() 
b1.subordinates.all()

我不知道该如何实际执行。我知道我可以做这样的事情:

class SubordinatesManager(Manager):
    def get_queryset:
        return super().get_queryset().filter(boss=b1)

但这仅适用于Employee类。

1 个答案:

答案 0 :(得分:3)

您基本上已经拥有了,可以像这样查询:

my_boss.employee_set.all()

您可能想通过更改employee_set的{​​{1}}属性来更改名称related_name

ForeignKey

在这种情况下,查询为:

class Employee(models.Model):
    boss = models.ForeignKey(Boss, on_delete=models.CASCADE, related_name='subordinates')
    name = models.CharField(max_length=200, blank=False)
    company = models.CharField(max_length=200, blank=False)

您还可以执行额外的过滤,注释等,例如:

my_boss.subordinates.all()

my_boss.subordinates.filter(name__contains='John') 为首的所有Employees都以my_boss为名。