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

Validação de formulário (django)

Cria uma apricação para cadastrar os membros de um time de futebol, uma maneira de treinar com o Framework, porém na hora de validar o formulário ele deixa passar números iguais, segue o código:

 def valida_nome(self, nome):
        validade = True
        nomes = []
        perfis = Perfil.objects.all()
        for perfil in perfis:
            nomes.append(perfil.nome)
        if nome in nomes:
            validade = False
            self.adiciona_erro('O nome já está cadastrado') 
        return validade    

    def valida_numero(self, numero):
        validade = True
        numeros = []
        perfis = Perfil.objects.all()
        for perfil in perfis:
            numeros.append(perfil.n_camisa) 
        if numero in numeros:
            validade = False
            self.adiciona_erro('O número já está cadastrado') 
        return validade


    def is_valid(self):
        valid = True
        if not super(Perfilform, self).is_valid():
            self.adiciona_erro('Por favor, verifique os dados imformados (principalmente o número)')
            valid = False

        return valid

E o código dentro da função de view:

def registrar(request):
    if request.method == 'GET':
        form =Perfilform()
        return render(request, 'registrar.html', {'form': form})
    elif request.method == 'POST':
        form = Perfilform(request.POST)
        dados = form.data
        if form.is_valid():
            if Perfilform.valida_nome(form, dados['nome']) and Perfilform.valida_numero(form, dados['n_camisa']):
                perfil = Perfil(nome = dados['nome'], nome_camisa= dados['nome_camisa'],
                                 n_camisa=dados['n_camisa'], n_telefone=dados['n_telefone'])
                perfil.save()
        return render(request, 'registrar.html', {'form': form})

Quando tento cadastrar um nome já exstente ele aponta que ele já exste e pede para que eu mude, já em relação ao número não ocorre o mesmo, pode ter alguma relação com o fato de um ser um CharField e o outro IntegerField?

Gostaria de uma maneira de reolver meu problema, desde já agradeço pela ajuda

4 respostas

No primeiro exemplo não retorna nada:

n_camisa = ['10', 15, 40]
if 10 in n_camisa:
    print "Já está cadastrada"

No segundo exemplo ele printa que já está cadastrado

 if 15 in n_camisa:
     print "Já está cadastrada"
>>>Já está cadastrada

O que pode estar acontecendo na sua aplicação é que o valor dentro da lista está com um tipo diferente já que o python permite ter dentro de um array mais de um tipo de objeto. Não sei se esse é o caso mas.

Opa Gabriel,

Você pode postar o código html do formulário aqui?

No formulário eu estou usando o padrão do Django, {{form.as_p}}

solução!

Mudei o campo para CharField e deu certo