Django ForeignKey limit_choices_to несколько дочерних элементов

У меня есть следующие модели:

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" только для учителя и ученика. Как я могу это сделать?

1 ответ

Решение

Я бы предложил реализовать собственный менеджер, возможно, переопределяя get_queryset, Я вижу 2 решения, чтобы получить только тех родителей, которые имеют ChildA и / или ChildB.

  • Если один родительский объект никогда не имеет ChildA и ChildB в одно и то же время (или любую другую комбинацию), вы можете добавить дополнительное поле (столбец db) в Parent, которое указывает, каков класс его дочернего объекта, если таковой имеется. В get_queryset вашего собственного менеджера вы всегда проверяете это поле.
  • Если один родитель может иметь несколько классов Child одновременно, или если вы не хотите добавлять дополнительный столбец, вы переопределяете get_queryset, чтобы фактически выбрать из ChildA и ChildB, а затем объединить наборы запросов в один набор запросов.
Другие вопросы по тегам