Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro no makemigrations

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 %}
1 resposta
solução!

Geovane teu erro é aqui:

AttributeError: 'module' object has no attribute 'ManytoManyField'

O certo é:

'ManyToManyField'

O T maiusculo