Eu estou com dificuldade de entender, então eu fiz alguns tabelas para melhorar isso, e gostaria de saber se essa minha analogia estaria correta.
Dado as classes Perfil (com 2 CharFields nome e email) e a Classe Convite (com os 2 ForeignKey da aula, convidado e solicitante), esse foi meu entendimento da arrumação dos atributos no banco de dados:
Classe Perfil:
Pra eu acessar o perfil de id=1, eu uso o get e assim uso perfil.nome pra devolver o nome e perfil.email pra devolver o email.
E se eu quiser saber os convidados associados a o perfil de id=1, eu uso o atributo do reletaded name da Classe Convite com o comando .all().
Classe Convite:
Pra eu acessar o convite id=1, eu uso também o get, só que aqui tem sempre um solicitante associado a um convidado. Então o comando convite.solicitante.(atributo_da_Classe_Perfil) devolve o atributo correspondente da classe perfil. Análogo é: convite.convidado.(atributo_da_Classe_Perfil).
Até aqui está correto esse meu entendimento?
Depois vou postar minha dúvida com relação ao atributo contatos (ManyToManyField) e ao atributo usuário(OneToOneField).