Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
15
respostas

Problemas ao gerar o código "Convidar", lição 6

Boa tarde,

Criei a o método dentro do views.py

def convidar(request, perfil_id):
    perfil_a_convidar = Perfil.objects.get(id=perfil_id)
    perfil_logado = get_perfil_logado(request)
    perfil_logado.convidar(perfil_a_convidar)
    return redirect ('index')

Tambem criei o metodo "convidar" em meu models.py

def convidar(self, perfil_convidado):
    Convite(solicitante=self, convidado=perfil_convidado).save()

Duvida: na linha

    perfil_logado.convidar(perfil_a_convidar)

este meu "convidar" seria o método que esta dentro do models.py ?

Pois realizei todo passo a passo do curso e no momento que clico no "convidar", retorna o erro:

Perfil' object has no attribute 'convidar'
Request Method:    GET
Request URL:    http://127.0.0.1:8000/perfis/2/convidar
Django Version:    1.7.4
Exception Type:    AttributeError
Exception Value:    
'Perfil' object has no attribute 'convidar'
Exception Location:    C:\Python27\Scripts\connectedin\perfis\views.py in convidar, line 17
Python Executable:    C:\Python27\python.exe
Python Version:    2.7.12

Acredito que o Djando esta reconhecendo o "convidar como atributo da classe Perfil e não como um metodo :s

Não sei como seguir ....

15 respostas

Opa! Cole o código completo da classe Perfil para que possamos dar uma olhadinha.

Uma coisa que pode ser é que você esta passando um ID que não existe.

Classe Perfil

from django.db import models

class Perfil(models.Model):

    nome = models.CharField(max_length=255, null=False)
    email = models.CharField(max_length=255, null=False)
    telefone = models.CharField(max_length=15, null=False)
    nome_empresa = models.CharField(max_length=255, null=False)


def convidar(self, perfil_convidado):
    Convite(solicitante=self, convidado=perfil_convidado).save()

class Convite(models.Model):
    solicitante = models.ForeignKey(Perfil, related_name='convites_feitos')
    convidado = models.ForeignKey(Perfil, related_name='convites_recebidos')

Referente ao ponto em passar um código que não existe, ja verifiquei e estou passando o código do usuário correto id=1 onde o mesmo existe no banco.

Você está postando o código sem clicar no botão INSERIR CÓDIGO. Isso nos obriga a alterar seu post toda vez para que se torne legível. Tente usar o botão inserir código. Isso vai nos ajudar bastante!

Como você implementou o método get_perfil_logado? Veja que ele retorna um Perfil. Se ele estiver com problema e não retornar um Perfil válido, a instância não terá o método convidar.

Pode ficar tranquilo que mais de 200 pessoas já passaram por essa parte sem problema algum. A gente descobre o que há com seu código.

def get_perfil_logado (request): return Perfil.objects.get(id=1)

:/ esta dessa forma ...

Então. ..parece que não há esse Id. Quais sãos os id's que você tem gravado?

Wendell?

Tenho os ID: 1, 2 e 3

A URL que você esta acessando é digitada manualmente por você ou já é na parte que o link é montado na página? Se for, coloque o código da página.

Chegou a comparar seu código com o stage, gabarito do próximo capítulo?

Faz o seguinte, zipa seu projeto e passa o link para que eu possa baixá-lo. Raramente faço isso, mas nesse caso, estou curioso para saber o que esta acontecendo também.

Aguardo o link com o projeto zipado.

Vou comparar os códigos com o arquivo, linha a linha .. caso não consiga zipo meu projeto e te passo o link.

Desde já agradeço.

Se quiser já pode me enviar. É que como estou fazendo outras coisas ao mesmo tempo e não quero deixar você sem resposta, olhar o código aqui as vezes não esclarece muito. Vendo o projeto eu tenho visão geral.

Eu quero descobrir o que há, fico curioso e angustiado igual aos meus alunos.

Assim que mandar o link eu dou uma olhadinha.

Boa tarde Flavio,

Depois de muita observação no codigo, descobri o Gap rs

Ao criar o método "def convidar(self, perfil_convidado):" dentro da class Perfil

Fiz uma grande besteira em dar um espaço ' ' e apos um Tab ' ', com isso ele não conseguia identificar.

Após apagar o espaço e dar apenas um tab, o codigo funcionou perfeitamente.

Desde ja agradeço todo o apoio, e desculpa a falha ai rs :)

solução!

Ih, relaxa! Por isso eu queria ver seu código. Python tem dessas coisas mesmo e muitas vezes o código colado não deixa claro que este problema de espaço é problema.

Eu fico muito contente de você ter descoberto o problema. Até porque, agora se isso acontecer mais uma vez, você já tem a manhã para resolver,