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