0

我有以下型号:

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”仅限于教师和学生。我怎样才能做到这一点?

4

1 回答 1

0

我会提议实现一个自定义管理器,可能会覆盖get_queryset. 我可以看到 2 个解决方案,只让那些拥有 ChildA 和/或 ChildB 的父母。

  • 如果一个 Parent从来没有同时拥有 ChildA 和 ChildB(或任何其他组合),您可以向 Parent 添加一个额外的字段(db 列),它指示其子对象的类(如果有)。在get_queryset您的自定义管理器中,您始终检查此字段。
  • 如果一个 Parent 可以同时拥有多个 Child 类,或者如果您不想添加额外的列,则覆盖get_queryset, 以实际从 ChildA 和 ChildB 中选择,然后查询集组合成一个查询集。
于 2015-10-22T08:32:55.007 回答