В основном у меня есть Базовый класс, который называется «Программа». Затем у меня есть более конкретные типы моделей программ, которые используют Программу в качестве базового класса. Что касается 99% моих потребностей, мне все равно, является ли Программа одним из конкретных типов детей. Конечно, есть 1% времени, когда я хочу знать, является ли это один из детей.
Проблема в том, что если у меня есть, скажем, модель SwimProgram и модель CampProgram, использующая Program в качестве своей базы, то будет проблематично выяснить, что это такое, без множества блоков try / кроме. Я хочу что-то вроде следующего:
program = models.Program.objects.get(id=15)
if program.swimprogram:
## do stuff
elif program.campprogram:
## do stuff
else:
## do other stuff
Конечно, это вызывает исключение типа DidNotExist. Я мог бы использовать try / excepts, которые являются более уродливыми, или у меня могла бы быть программа, имеющая поле 'type', которое дети сохраняли при сохранении. И то и другое выполнимо, но мне любопытно, есть ли у кого-нибудь лучшие методы.