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

Submissão de modais

Estava tentando melhorar o meu sistema e adicionei um modal para cadastrar novo jogo ao invés de uma página inteira. Porém, ao tentar submeter o modal, parece que o form não está reconhecendo o atributo "action" e não está redirecionando para rota de cadastro. Além disso, os dados estão sendo passados por 'get' mesmo eu colocando para serem passados por 'post'. Isso faz com que o programa não entre na minha rota de cadastro e não salve no banco de dados.

3 respostas

Oi Geovana, tudo bem com você?

Poderia compartilhar o seu código conosco para que consigamos te orientar melhor?

Fico no aguardo.

Tentei adaptar o mesmo código em um trabalho meu da faculdade. O sistema pede para inserir dados de uma produção no banco de dados. A visualização das produções é em uma tabela. A tabela contém um botão de adicionar. Ao clicar em adicionar, o modal é aberto. O usuário insere os dados. O problema é na hora de submeter. Como visto, encaminhei o "action" do formulário para a rota de "novaproducao" pelo método post. Mas ao submeter, o sistema não está encaminhando para a rota solicitada e não está salvando no banco de dados. Além disso, os dados estão todos sendo passados na url mesmo o método sendo post.

Código do Modal:

<div class="modal fade" id="ExemploModalCentralizado" tabindex="-1" role="dialog" aria-labelledby="TituloModalCentralizado" aria-hidden="true">
                    <div class="modal-dialog modal-dialog-centered" role="document">
                      <div class="modal-content">

                        <div class="modal-header">
                            <h5 class="modal-title" id="TituloModalCentralizado">Cadastro Nova Produção</h5>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Fechar">
                                <span aria-hidden="true">&times;</span>
                            </button>
                        </div>

                        <form action="{{ url_for('novaproducao') }}" method="POST">
                          <div class="modal-body">
                              <div class="form-group">
                                  <label for="tipodoacai">Tipo de Açaí</label>
                                  <select class="form-control" name="tipodoacai" id="tipodoacai">
                                    <option>Selecionar...</option>
                                    <option value="1">Tradicional</option>
                                    <option value="2">Premium</option>
                                  </select>
                              </div>
                              <div class="form-group">
                                  <label for="quantidade">Quantidade</label>
                                  <input type="text" class="form-control" name="quantidade" id="quantidade">
                              </div>
                              <div class="form-group">
                                  <label for="datalancamento">Data de Lançamento</label>
                                  <input type="date" class="form-control" name="datalancamento" id="datalancamento">
                              </div>
                          </div>

                          <div class="modal-footer">
                              <button type="button" class="btn btn-secondary" data-dismiss="modal">Fechar</button>
                              <button type="submit" class="btn btn-primary" id="botao">Salvar</button>
                          </div>
                        </form>

                      </div>
                    </div>
                  </div>

Código das classes e criando a tabela:

class Producao(db.Model):
    __tablename__ = "producao"

    id = db.Column(db.Integer, primary_key=True)
    id_tipo = db.Column(db.Integer, db.ForeignKey('acai.id'))
    data_lancamento = db.Column(db.Date)
    data_validade = db.Column(db.Date)
    quantidade = db.Column(db.Integer)

    tipo = db.relationship('Acai', foreign_keys=id_tipo)

    def __init__(self, id_tipo, data_lancamento, data_validade, quantidade):
        self.id_tipo = id_tipo
        self.data_lancamento = data_lancamento
        self.data_validade = data_validade
        self.quantidade = quantidade

    def __repr__(self):
        return "<Producao %r>" % self.id

Código das rotas:

@app.route("/novaproducao", methods=['POST',])
def novaproducao():
    i = Producao(request.form['tipoacai'], 
                 datetime.strptime('1779-01-01 00:00:00', "%Y-%m-%d %H:%M:%S").date(),
                 datetime.strptime('1776-01-01 00:00:00', "%Y-%m-%d %H:%M:%S").date(), 
                 request.form['quantidade'])
    db.session.add(i)
    db.session.commit()
    return "OK"

Obs: estou usando SQLAlchemy. Coloquei datas predefinidas ao inves de pegar no request.form para fins de testes.

solução!

Consegui resolver colocando o modal inteiro dentro do formulário.