Creando consultas de bases de datos eficientes para modelos jerárquicos (django)

Considere este modelo (django):

class Source(models.Model):
   # Some other fields
   type = models.ForeignKey('Type')

class Type(models.Model):
    # Some other fields
    parent = models.ForeignKey('self')

ste modelo tiene una clave foránea para sí mismo, creando así una jerarquí

Digamos que tenemos la siguiente jerarquía:

Website
    Blog
    News    
    Social Network
    Q&A
    Forum
Radio
    Government radio
    Pirate radio
    Commercial radio
    Internet radio

¿Cómo hago una consulta eficiente para que si seleccionoSource porType, También recuperoSources que tienen unType que es un hijo del tipo dado?

e intentado atravesar todo el árbol, pero obviamente no es muy eficiente.

Otra opción sería utilizar ManyToManyField y adjuntar automáticamente los tipos principales anulando el método save (). Por ejemplo, si se selecciona 'blog', también se crea un registro para 'sitio web'. Pero esto me parece excesivo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta