我有两个模型。
老板:
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类。
答案 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
为名。