Mon application utilise l'héritage de classe pour minimiser la répétition dans mes modèles. Mon models.py ressemble un peu comme ceci:Quelle est la manière la plus simple de trouver une instance enfant depuis une instance parent dans Django?
class BaseModel(models.Model):
title = models.CharField(max_length=100)
pub_date = models.DateField()
class Child(BaseModel):
foo = models.CharField(max_length=20)
class SecondChild(BaseModel):
bar = models.CharField(max_length=20)
Maintenant, la plupart du temps, mon point de vue et les modèles portent uniquement sur les cas d'enfants ou SecondChild. De temps en temps, cependant, j'ai une situation où j'ai une instance de BaseModel, et j'ai besoin de comprendre quelle classe hérite de cette instance.
Étant donné une instance de BaseModel, appelons-la base, ORM de Django propose base.child et base.secondchild. Actuellement, j'ai une méthode qui les traverse tous pour le comprendre. Il ressemblerait à quelque chose comme ceci:
class BaseModel(models.Model):
...
def get_absolute_url(self):
url = None
try:
self.child
url = self.child.get_absolute_url()
except Child.DoesNotExist:
pass
if not url:
try:
self.secondchild
url = self.secondchild.get_absolute_url()
except SecondChild.DoesNotExist:
pass
if not url:
url = '/base/%i' % self.id
return url
C'est désespérément laid, et obtient plus laid avec chaque classe enfant supplémentaire que j'ai. Est-ce que quelqu'un a des idées sur une façon meilleure, plus pythonique de s'y prendre?
le dernier si ce n'est pas vraiment nécessaire, n'est-ce pas? – Macke
Merci! Mec, je me sens si stupide. – Udbhav