Olá!
Estou utilizando o Django 1.7, ao tentar criar o relacionamento bidirecional entre Perfil e Convite através dos atributos convites_feitos e convites_recebidos do related_name, vejo que que está ocorrendo algum problema na classe Perfil, que o Convidar não está funcionando.
Explicando melhor:
1. Criei a classe Convite, a função convidar em models.py e relacionei bidirecionalmente as Classes Perfil e Convite através do related_name:
Arquivo models.py
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')
2. Criei a função convidar Arquivo views.py
from django.shortcuts import render, redirect
from perfis.models import Perfil
def index(request):
return render(request, 'index.html', {'perfis': Perfil.objects.all()})
def exibir(request, perfil_id):
perfil = Perfil.objects.get(id=perfil_id)
return render(request, 'perfil.html', { "perfil" : perfil })
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')
def get_perfil_logado(request):
return Perfil.objects.get(id=1)
3. Executei os comandos makemigrates e migrate e inicializei o servidor.
4. Ao testar com a página perfil.html vi que NÃO deu certo o Convidar, não está exibindo nenhum perfil convidado, e ao ir para o shell testar o iterador e verificar se deu certo no banco, deu o erro. Além disso, digitando perfil.convites_feitos, aponta que não existe o atributo, bem como acontece em convites_recebidos:
Iterator que digitei no shell, semelhante ao do vídeo do curso:
from perfis.models import Perfil
perfil = Perfil.objects.get(id=1)
for convite in perfil.convites_feitos.all():
convite.convidado.nome
Traceback (most recent call last): File "", line 1, in AttributeError: 'Perfil' object has no attribute 'convites_feitos'
OBS: Conferi a pasta migrations, os arquivos, bem como os atributos related_named foram criados corretamente.
===============
Já conferi todo o meu código e passos realizados, e não vi erro. Alguém saberia, ou teria sugestão do que há de errado? Como eu poderia resolver? Teria alguma relação com a versão 1.7 do Django?
Por que será que os atributos convites_feitos e convites_recebidos não estão sendo criados dentro da classe Perfil? ou pelo menos não podem ser chamados pelo objeto da classe?
Desde já, agradeço.