Não estou conseguindo fazer o makemigrations.
λ python manage.py makemigrations
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 385, in execute_from_command_line
utility.execute()
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 354, in execute
django.setup()
File "C:\Python27\lib\site-packages\django\__init__.py", line 21, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Python27\lib\site-packages\django\apps\registry.py", line 108, in populate
app_config.import_models(all_models)
File "C:\Python27\lib\site-packages\django\apps\config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
__import__(name)
File "C:\Users\geova\Desktop\connectedin\perfis\models.py", line 3, in <module>
class Perfil(models.Model):
File "C:\Users\geova\Desktop\connectedin\perfis\models.py", line 8, in Perfil
contatos = models.ManytoManyField('self')
AttributeError: 'module' object has no attribute 'ManytoManyField'
Os meus códigos:
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)
contatos = models.ManytoManyField('self')
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')
def aceitar(self):
self.convidado.contatos.add(self.solicitante)
self.solicitante.contatos.add(self.convidado)
self.delete()
Arquivo views.py:
from django.shortcuts import render, redirect
from perfis.models import Perfil, Convite
def index(request):
return render(request,'index.html', {'perfis' : Perfil.objects.all(), 'perfil_logado' : get_perfil_logado(request)})
def exibir(request, perfil_id):
perfil = Perfil.objects.get(id=perfil_id)
return render(request,'perfil.html', {'perfil' :perfil, 'perfil_logado' : get_perfil_logado(request)})
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)
def aceitar(request, convite_id):
convite = Convite.objects.get(id=convite_id)
convite.aceitar()
return redirect('index')
Arquivo urls.py:
from django.conf.urls import patterns, include, url
from django.contrib import admin
from perfis import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^perfis/(?P<perfil_id>\d+)$', views.exibir, name='exibir'),
url(r'^perfis/(?P<perfil_id>\d+)/convidar$', views.convidar, name='convidar'),
url(r'^convite/(?P<convite_id>\d+)/aceitar$', views.aceitar, name='aceitar' )
)
Arquivo index.html:
{% extends "base.html" %}
{% block body %}
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<strong>Todos os perfis</strong>
</div>
{% if perfis %}
<ul>
{% for perfil in perfis %}
<li>
<a href="{% url 'exibir' perfil.id %}">{{ perfil.nome }} </a> / {{ perfil.email }} / {{ perfil.nome_empresa|upper}}
</li>
{% endfor %}
</ul>
{% else %}
<p>Nenhum perfil encontrado</p>
{% endif %}
</div>
<div class="panel panel-default">
{% with total_de_convites=perfil_logado.convites_recebidos.count %}
{% if total_de_convites %}
<div class="panel-heading">
<strong>Você tem {{ total_de_convites }} convite{{ total_de_convites|pluralize }} aguardando aprovação</strong>
</div>
<ul class="list-group">
{% for convite in perfil_logado.convites_recebidos.all %}
<li class="list-group-item">
{{ convite.solicitante.nome }}
<a href="{% url 'aceitar' convite.id %}" class="pull-right">aceitar</a>
</li>
{% endfor %}
</ul>
{% else %}
<div class="panel-body">
<p>Nenhum convite recebido :(</p>
</div>
{% endif %}
{% endwith %}
</div>
</div>
{% endblock %}