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, а затем объединить наборы запросов в один набор запросов.