Tengo una situación en la que estoy modelando un partido de fútbol, y cada partido tiene un conjunto de eventos relacionados que se relacionan con lo que sucedió durante el juego. Así que algo un poco como esto:Django: consultar una clase base abstracta
class Event(models.Model):
time = models.IntegerField()
class Meta:
abstract = True
class Goal(Event):
scorer = models.ForeignKey('Player')
class PitchInvasion(Event):
number_of_people = models.IntegerField()
class FootballMatch(models.Model):
events = models.ForeignKey('Event')
Perdona el ejemplo descabellada, pero que está ahí para demostrar que estas subclases de Event
podrían ser cualquier cosa. Lo que quiero hacer es poder consultar todos esos eventos y ordenarlos a tiempo, para dar una visión cronológica de lo que sucedió en ese partido.
Sin embargo, con abstract = True
, los objetos Event
terminar con un pitchinvasion_set
, goal_set
y así sucesivamente,. ¿Esto se resolvería configurando abstract = False
y usando herencia concreta? He leído que hacer esto es a bad idea, as it introduces an extra join.
¿Cuál es la mejor manera de manejar situaciones como esta?
La herencia de clase de modelo Django (real o abstracta) es * no * herencia verdadera en el sentido de Python. Es más una opción de conveniencia que otra cosa. Tuve que lidiar con algo similar hace un año y nunca encontré una solución satisfactoria. –