Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

MultiValueDictKeyError at /registrar/

Ao tentar registrar, o erro diz:

Exception Type:    MultiValueDictKeyError
Exception Value:    
"'nome'"
Exception Location:    C:\Program Files\Python35\lib\site-packages\django\utils\datastructures.py in __getitem__, line 322

e aponta o trecho username=self.data['nome'] nesse código do arquivo forms.py:

    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() #<---nessa linha
        if user_exists:
            self.adiciona_erro('Usuario ja existente')
            valid = False

        return valid

Estou usando versões bem diferentes do curso, porém consegui chegar até aqui sem grandes problemas, e não achei nada parecido ou explicativo na internet ainda... versões:

Python 3.5.2

django.VERSION (1, 8, 0, 'final', 0)

3 respostas

Fazendo um teste com prints, percebi que não está passando valor nenhum...

    def post(self, request):
        form = RegistrarUsuarioForm(request.POST)
        print('--------')
        print('data: '+form.data['nome'])
        print('data: '+form.data['email'])

as duas ultimas linhas de PRINT não estão sendo impressas, só os '-----'poderia ser isso? se sim, o que fazer de diferente? onde procurar meu erro?será problema de versão e o código do curso?

solução!

Uso a mesma versão que você do django e e deu certo comigo. Provavelmente não é problema de versão.

Se ele não está passando valor nenhum pode ter duas razões. Ou você está procurando os dados nos métodos errados (GET ao invés de POST, ou vive-versa ), o que não parece ser seu caso porque você está usando a função post.

Ou o form não está conseguindo mapear os dados da requisição para seus atributos. Uma causa provável é os elementos html não estarem nomeados corretamente. Os atributos do form (nome, email, senha, ....) têm o mesmo nome da propriedade "name" dos seus respectivos elementos html?

Outra coisa que me intriga é o trecho abaixo do erro que vc apresentou:

Exception Value:    
"'nome'"

Por esse erro, parece que você estrá procurando pela chave 'nome' e não pela chave nome.

Cara, eu olhei todos os arquivos e comparei com os do curso, todos MENOS os HTMLs kkkkk

Confiei tanto na simplicidade do html que eu esqueci de setar os names dos campos e por isso não tava indo, como você disse, ai sua dica me deu uma luz.Arrumei os names e deu tudo certo, valeu Thiago!!

obs: o erro deve ter apontado a linha do 'filter' onde aparece o self.data['nome'] por não ter recebido valor e mesmo assim tentado um filter, ai me confundiu na hora de debugar...

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software