Django ForeignKey limit_choices_to 多个子元素

Django ForeignKey limit_choices_to multiple child elements

我有以下型号:

class Person(models.Model):
    # fields

class Teacher(Person):
    # fields

class Student(Person):
    # fields
    teacher = models.ForeignKey(teacher)

class Staff(Person):
    # fields

class SomeModel(models.Model):
    # fields
    point_person = models.ForeignKey(Person)

但我想将我的 "point_person" 限制为仅限教师和学生。我该怎么做?

我愿意实施 custom manager,可能会覆盖 get_queryset。 我可以看到 2 个解决方案,只获得那些拥有 ChildA and/or ChildB.

的 Parent
  • 如果一个 Parent never 同时有 ChildA 和 ChildB(或任何其他组合),您可以向 Parent 添加一个额外的字段(db 列),它指示什么是class 它的子对象,如果有的话。在您的自定义管理器的 get_queryset 中,您总是检查此字段。
  • 如果一个 Parent 可以同时拥有多个 class 个 Child,或者如果您不想添加额外的列,那么您可以覆盖 get_queryset,实际上 select从 ChildA 和 ChildB,然后 combine the querysets 变成一个查询集。