Fondamentalement, j'ai une classe de base appelée "Programme". J'ai alors des types de modèles de programmes plus spécifiques qui utilisent Program comme classe de base. Pour 99% de mes besoins, je ne me soucie pas de savoir si un programme est l'un des types d'enfants spécifiques. Bien sûr, il y a 1% du temps que je veux savoir si c'est un des enfants. Le problème est que si je l'ai, disons, un modèle SwimProgram et un modèle CampProgram utilisant Program comme base, il est problématique de savoir ce qu'ils sont sans un tas de blocs try/except. Ce que je veux est quelque chose comme ce qui suit:Distinguer les enfants du modèle parent avec l'héritage Django
program = models.Program.objects.get(id=15)
if program.swimprogram:
## do stuff
elif program.campprogram:
## do stuff
else:
## do other stuff
Bien sûr, cela jette exceptions DoesNotExist. Je pourrais soit utiliser try/exceptions qui sont plus laids, ou je pourrais avoir Program un champ 'type' que les enfants mis en sauvegarde. Les deux sont faisables, mais je suis curieux de savoir si quelqu'un a de meilleures méthodes.
* facepalm * Merci. :) – f4nt
Etes-vous sûr que cela fonctionne? Je suis sûr que 'programme' a les deux attributs. L'exception DoesNotExist se produit uniquement lorsque vous tentez d'y accéder (puisque l'héritage est modélisé avec une relation OneToOne) –
yw f4nt. J'ai fait à peu près la même chose quand je me suis débrouillé pour moi-même. @piquadrat, j'ai ajouté un petit exemple pour montrer comment cela peut fonctionner. Merci pour le coup de pouce pour ajouter l'exemple. – istruble