Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

317
Visualizações
Formulario Flask-WTF con un número variable de campos (una lista de elementos)

Tengo un formulario para crear una receta de cóctel. Tiene algunos campos comunes como nombre, descripción y otros, y también una lista de ingredientes. Un ingrediente tiene una ID (clave externa para una tabla de ingredientes), como el valor de una etiqueta de select , un nombre y un campo numérico de cantidad , como entrada del usuario. Al principio, en el HTML solo hay un campo para un ingrediente; si el usuario desea agregar otro ingrediente a la receta, un botón 'Agregar ingrediente' crea otro campo, justo después del anterior.

¿Cómo puedo administrar este tipo de formulario con WTForms y Flask-WTF, en un backend de Python/Flask? Mi problema es: ¿cómo puedo decir en la clase de formulario "existe esta lista que debe tener al menos un elemento (un ingrediente) y no un máximo" para poder insertar correctamente la receta en la base de datos?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

tal vez crear una tercera mesa?

 Table 1 (Cocktail Table): cocktail_id cocktail_name Table 2 (Ingredients Table): cocktail_id ingredients_name Table 3 (Cocktail Ingredients Table): cocktail_ingredients_id cocktail_id ingredients_id quantity

Luego, para un cóctel determinado, busque en la tabla 3 todos los resultados de cocktail_id.
Puede unir internamente las otras tablas para obtener el nombre del ingrediente o el nombre del cóctel cuando sea necesario.

Al cargar a la base de datos, solo necesita crear una nueva entrada para cada ingrediente de cóctel que está guardando en la tabla de ingredientes de cóctel; con el cocktail_id, los ingredientes_id y la cantidad.

EDICIÓN 1: hay muchas cosas que podría hacer, por ejemplo, cuando está creando su formulario en su ruta, puede enviarle su cocktail_id, y luego, cuando esté creando su formulario, buscará todas las instancias de cocktail_id en su Tabla 3; y cree un nuevo (o conjunto de) campo(s) para cada resultado. Y en el momento en que el usuario presiona 'agregar ingrediente', puede enviarlos

 def createForm(cocktail_id): class FormClass(FlaskForm): # put your non dynamic fields here pass # add in your fields that are dependent on how many ingredients post_variables_list = [] # find all table 3 results for given cocktail table3_objects = Table3.query.filter_by(id=cocktail_id).all() for table3_object in table3_objects: setattr(FormClass, f'ingredientname_{table3_object.table3_id}', StringField('Ingredient Name', default=table3_object.ingredient_name)) post_variables_list.append(f'ingredientname_{table3_object.table3_id}') return FormClass(), post_variables_list @app.route('/example_route/<int:cocktail_id>') def example_route(cocktail_id): form, post_variables_list = createForm(cocktail_id) if request.method=='POST': submit_dictionary = {} submit_dictionary = form.data for current_variable in post_variables_list: fieldname, table3_id = current_variable.split('_') # find existing object, that you can create by redirecting to a different route # which just creates a new table 3 entry, which is associated w/ this cocktail each time you # press add ingredient and then redirects you to here table3_object = db.session.query(Table3).filter(Table3.id==table3_id).first() if fieldname = 'name': table3_object.name = submit_dictionary[current_variable] # could have other conditions here for other fields db.session.add(table3_object) db.session.commit() # route which just creates a new empty ingredient @app.route('create_new_empty_ingredient/int:cocktail_id') def create_new_empty_ingredient(cocktail_id): # create new entry in table 3 table3_object = Table3 ( cocktail_id = cocktail_id ) db.session.add(table3_object) db.session.commit() # redirect back to example_route return redirect(url_for('example_route', cocktail_id=cocktail_id))
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda