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

OperationalError at /registrar/

Ao tentar registrar um novo usuário me ocorre o seguinte erro: OperationalError at /registrar/ table perfis_perfil has no column named usuario_id Do qual não estou conseguindo prosseguir, gostaria se possível de uma ajuda para resolver esse problema, segue o código abaixo: views.py

from django.shortcuts import redirect
from django.shortcuts import render
from django.contrib.auth.models import User
from django.views.generic.base import View
from perfis.models import Perfil
from usuarios.forms import RegistrarUsuarioForm

# Create your views here.
class RegistrarUsuarioView(View):

    template_name = 'registrar.html'
    def get(self, request):
        return render(request, self.template_name)

    def post(self, request):
        form = RegistrarUsuarioForm(request.POST)
        if form.is_valid():
            dados_form = form.data

            usuario = User.objects.create_user(dados_form['nome'], dados_form['email'], dados_form['senha'])

            perfil = Perfil(nome=dados_form['nome'],
                            telefone=dados_form['telefone'],
                            nome_empresa=dados_form['nome_empresa'],
                            usuario=usuario)
            perfil.save()
            return redirect('index')

        return render(request, self.template_name, {'form' : form})

forms.py

from django import forms
from django.contrib.auth.models import User

class RegistrarUsuarioForm(forms.Form):
    nome = forms.CharField(required=True)
    email = forms.EmailField(required=True)
    senha = forms.CharField(required=True)
    telefone = forms.CharField(required=True)
    nome_empresa = forms.CharField(required=True)

    def is_valid(self):
        valid = True
        if not super(RegistrarUsuarioForm, self).is_valid():
            self.adiciona_erro('Por favor, verifique os dados informados')
            valid = False

        user_exists = User.objects.filter(username=self.data['nome']).exists()

        if user_exists:
            self.adiciona_erro('Usuario ja existente')
            valid = False

        return valid

    def adiciona_erro(self, message):
        errors = self._errors.setdefault(forms.forms.NON_FIELD_ERRORS, forms.utils.ErrorList())
        errors.append(message)

models.py

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", on_delete=models.CASCADE)

    @property
    def email(self):
        return self.usuario.email

    def convidar(self, perfil_convidado):
        Convite(solicitante=self, convidado=perfil_convidado).save()

class Convite(models.Model):

    solicitante = models.ForeignKey(Perfil, related_name='convites_feitos', on_delete=models.CASCADE)
    convidado = models.ForeignKey(Perfil, related_name='convites_recebidos', on_delete=models.CASCADE)

    def aceitar(self):
        self.convidado.contatos.add(self.solicitante)
        self.solicitante.contatos.add(self.convidado)
        self.delete()

Desde já agradeço!!

1 resposta
solução!

Depois de algum tempo, consegui resolver o problema. Apaguei o arquivo db.sqlite3 do projeto, e realizei as configurações do banco novamente com o seguinte comando:

python manage.py migrate