Sim, segue a minha view e o model abaixo:
from django.shortcuts import render, redirect
from perfis.models import Perfil, Convite
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
@login_required
def index(request):
return render(request, 'index.html', {'perfis' : Perfil.objects.all(), 'perfil_logado' : get_perfil_logado(request) })
@login_required
def exibir(request, perfil_id):
perfil = Perfil.objects.get(id=perfil_id)
perfil_logado = get_perfil_logado(request)
ja_eh_contato = perfil in perfil_logado.contatos.all()
return render(request, 'perfil.html', { "perfil" : perfil, 'perfil_logado' : get_perfil_logado(request), "ja_eh_contato" : ja_eh_contato })
@login_required
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')
@login_required
def aceitar(request, convite_id):
convite = Convite.objects.get(id=convite_id)
convite.aceitar()
return redirect('index')
@login_required
def get_perfil_logado(request):
return request.user.perfil
model:
from django.db import models
from django.contrib.auth.models import User
class Perfil(models.Model):
nome = models.CharField(max_length=255, null=False)
telefone = models.CharField(max_length=15, null=False)
nome_empresa = models.CharField(max_length=255, null=False)
contatos = models.ManyToManyField('self')
usuario = models.OneToOneField(User, related_name="perfil")
@property
def email(self):
return self.usuario.email
def convidar(self, perfil_convidado):
convite = 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')
def aceitar(self):
self.convidado.contatos.add(self.solicitante)
self.solicitante.contatos.add(self.solicitante)
self.delete()