1
resposta

[Dúvida] erro em validação em projeto django

Eu to criando uma aplicação django de estoque e dei de cara com um problema que estou a horas tentando solucionar e não consigo

criei uma view de atualizar estoque, onde é um form no qual os campos obrigatorios são apenas os de 'quantidade' e 'produto' , e estou tentando fazer uma validação para caso o produto já exista no estoque, somar a quantidade colocada no form a quantidade ja existente no banco

o problema é que isso só acontece quando eu preencho o campo 'preco' do form, quando deixo ele null, a quantidade não é somada

alguem pode me ajudar? travei nessa parte

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

https://github.com/gustavossobral/sistema-de-estoque

1 resposta

Olá Gustavo! Tudo bem?

Quando o campo "preço" é deixado em branco, ele pode estar sendo tratado de forma diferente, o que impede a soma da quantidade. Vamos ajustar isso.

No trecho de código onde você verifica e atualiza o preço, tente garantir que a lógica não dependa do campo "preço" para atualizar a quantidade. Veja a sugestão abaixo:

def adicionar_produto(request):
    if request.method == 'POST':
        form = EstoqueForm(request.POST)
        if form.is_valid():
            produto_form = form.cleaned_data['produto']
            quantidade_form = form.cleaned_data['quantidade']
            preco_form = form.cleaned_data.get('preco')  # Use get para evitar KeyError
            fornecedor_form = form.cleaned_data['fornecedor']
            descricao_form = form.cleaned_data['descricao']

            try:
                # Se o produto já existir no estoque, adicionar a quantidade informada
                estoque_produto = Estoque.objects.get(produto=produto_form)
                if estoque_produto.quantidade is not None:
                    estoque_produto.quantidade += quantidade_form

                # Atualizar o preço apenas se ele for fornecido e diferente do atual
                if preco_form is not None and preco_form != estoque_produto.preco:
                    estoque_produto.preco = preco_form

                estoque_produto.fornecedor = fornecedor_form
                estoque_produto.descricao = descricao_form
                estoque_produto.save()

            except Estoque.DoesNotExist:
                # Se o produto não existir, criar um novo registro
                form.save()

            return redirect('mostrar_estoque')
    else:
        form = EstoqueForm()
    return render(request, 'adicionar_produto.html', {'form': form, 'produto_choices': produto_choices})

Certifique-se de que o campo "preço" no seu formulário pode ser nulo, tanto no modelo quanto no formulário. Isso evitará problemas ao tentar acessar ou comparar valores nulos.

Espero ter ajudado e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!