2
respostas

Erro na classe Perfil

Quando eu tento salvar um perfil que eu insiro no banco, da o erro object has no attribute 'state'. Dando uma googada, vi que esse erro da porque precisa colocar o construtor (_init) na model, porém mesmo com o construtor o erro persiste. Segue a minha model: from django.db import models

class Perfil(models.Model): self.nome=models.CharField(max_length=255, null=False) self.email=models.CharField(max_length=255, null=False) self.telefone=models.CharField(max_length=255, null=False) self.nome_empresa=models.CharField(max_length=255, null=False)

Sabem o motivo deste erro?

Quanto eu tento inserir pelo manage.py shell:

In [15]: perfil = Perfil(nome='Oswaldo', email='oswaldo@oswaldo.com', telefone='n/a', nome_empresa='Alura')

In [16]: perfil.save()

AttributeError Traceback (most recent call last)

in ()

1 perfil.save()

C:\Program Files\Anaconda3\lib\site-packages\django\db\models\base.pyc in save(self, forceinsert, forceupdate, using, update_fields) 541 non-SQL backends), respectively. Normally, they should not be set. 542 """ --> 543 using = using or router.db_for_write(self.__class, instance=self) 544 if force_insert and (force_update or update_fields): 545 raise ValueError("Cannot force both insert and updating in model saving.")

C:\Program Files\Anaconda3\lib\site-packages\django\db\utils.pyc in _route_db(self, model, **hints) 292 return chosen_db 293 try: --> 294 return hints['instance']._state.db or DEFAULT_DB_ALIAS 295 except KeyError: 296 return DEFAULT_DB_ALIAS

AttributeError: 'Perfil' object has no attribute '_state'

2 respostas

Tente definir sua classe assim:

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=255, null=False) 
    nome_empresa=models.CharField(max_length=255, null=False)

O self é para ser usado dentro do __init__ para inicializar um objeto, que não é necessário dentro de sua classe model.

Thiago obrigado pela resposta, na verdade o problema é que eu estava chamado o comando migrate sem o nome da aplicação rsrs