Solucionado (ver solução)
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,