Auto relacionamento no Django

Auto relacionamento é bastante comum quando necessitamos de utilizar um determinado modelo de forma recursiva, nesse caso é impossível de se criar outras tabelas, pois não sabemos exatamente o nível de profundidade no qual esse relacionamento pode chegar.

Um exemplo ideal para compreendermos a necessidade de auto relacionamento são nas lojas virtuais, onde um determinado departamento possuí varias subcategorias e essas subcategorias podem ou não possuir mais subcategorias e assim sucessivamente, nesse modelo se torna impraticável a criação de novas tabelas para representar essas subcategorias, pois não sabemos até onde podemos chegar.

Construindo auto relacionamento no django

Vamos nesse momento criar o model responsável pelo auto relacionamento :

É possível observar que o atributo parent faz um relacionamento para self, ou seja, para si mesmo, nesse momento já temos um auto relacionamento. Agora já é possível obter a categoria no qual uma subcategoria pertence, porém necessitamos também do processo inverso, onde será possível obter as subcategorias a partir de uma determinada categoria. É ai que entra em jogo o parâmetro related_name,  esse indica qual será o atributo utilizado no processo inverso de relacionamento e o seu valor representa o nome do atributo a ser utilizado na obtenção das subcategorias.