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

280
Visualizações
Rellene previamente el valor actual del campo WTForms para editarlo

Tengo un formulario dentro de un modal que uso para editar una reseña sobre un artículo (un perfume). Un perfume puede tener múltiples reseñas, y las reseñas viven en una serie de documentos anidados, cada uno con su propio _id.

Estoy editando cada reseña en particular (en caso de que un usuario quiera editar su reseña sobre el perfume una vez que se haya enviado) enviando el EditReviewForm a esta ruta edit_review :

 @reviews.route("/review", methods=["GET", "POST"]) @login_required def edit_review(): form = EditReviewForm() review_id = request.form.get("review_id") perfume_id = request.form.get("perfume_id") if form.validate_on_submit(): mongo.db.perfumes.update( {"_id": ObjectId(perfume_id), <I edit my review here> }) return redirect(url_for("perfumes.perfume", perfume_id=perfume_id)) return redirect(url_for("perfumes.perfume", perfume_id=perfume_id))

Y esta ruta redirige a mi ruta de perfumes, que muestra el perfume y todas las reseñas que contiene.

Esta es la ruta del perfume :

 @perfumes.route("/perfume/<perfume_id>", methods=["GET"]) def perfume(perfume_id): current_perfume = mongo.db.perfumes.find_one({"_id": ObjectId(perfume_id)}) add_review_form = AddReviewForm() edit_review_form = EditReviewForm() cur = mongo.db.perfumes.aggregate(etc) edit_review_form.review.data = current_perfume['reviews'][0]['review_content'] return render_template( "pages/perfume.html", title="Perfumes", cursor=cur, perfume=current_perfume, add_review_form=add_review_form, edit_review_form=edit_review_form )

Mi problema

Para encontrar una manera de obtener el review _id en ese proceso y tenerlo en mi ruta de perfume , para poder completar previamente mi EditReviewForm con el valor actual. De lo contrario, el formulario parece vacío para el usuario que edita su reseña.

Codificando un índice (índice [0] en este caso):

 edit_review_form.review.data = current_perfume['reviews'][0]['review_content']

De hecho, estoy mostrando los valores actuales, pero, por supuesto, el mismo valor para todas las revisiones, ya que las revisiones están en un bucle en la plantilla, y necesito obtener el valor que tiene cada review_id.

¿Hay alguna manera de hacer esto, antes de renunciar a la idea de permitir que los usuarios editen sus reseñas? :D

Por favor, hágame saber si mi pregunta es clara o si se necesita más información.

¡¡Muchas gracias de antemano!!

ACTUALIZACIÓN 2:

Intentando reducir aún más la situación actual de mi plantilla para que quede más claro:

El modal con la reseña se dispara desde perfume-reviews.html , desde este botón:

 <div class="card-header"> <button type="button" class="btn edit-review" data-perfume_id="{{perfume['_id']}}" data-review_id="{{review['_id']}}" data-toggle="modal" data-target="#editReviewPerfumeModal" id="editFormButton">Edit</button> </div>

Y eso abre el modal donde está mi formulario con la revisión (el campo en cuestión es un área de texto que actualmente muestra un WYSIWYG de textarea :

 <div class="modal-body"> <form method=POST action="{{ url_for('reviews.edit_review') }}" id="form-edit-review"> <div class="form-group" id="reviewContent"> {{ edit_review_form.review(class="form-control ckeditor", placeholder="Review")}} </div> </form> </div>

Actualmente esto no está funcionando:

 $(document).on("click", "#editFormButton", function (e) { var reviewText = $(this) .parents(div.card.container) .siblings("div#reviewContent") .children() .text(); $("input#editReviewContent").val(reviewText); });

y lanza un ReferenceError: div is not defined .

¿Dónde estoy fallando aquí? (¿Quizás en más de un lugar?)

ACTUALIZACIÓN 3:

aquí es donde el botón abre el modal, y debajo es donde se muestra el contenido de la revisión:

 <div class="card container"> <div class="row"> <div class="card-header col-9"> <h5>{{review['reviewer'] }} said on {{ review.date_reviewed.strftime('%d-%m-%Y') }}</h5> </div> <div class="card-header col-3"> <button type="button" class="btn btn-success btn-sm mt-2 edit-review float-right ml-2" data-perfume_id="{{perfume['_id']}}" data-review_id="{{review['_id']}}" data-toggle="modal" data-target="#editReviewPerfumeModal" id="editFormButton">Edit</button> </div> </div> <div class="p-3 row"> <div class=" col-10" id="reviewContent"> <li>{{ review['review_content'] | safe }}</li> </div> </div> </div>
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Puede hacer esto con jQuery ya que cuando abre el formulario, el formulario mostrará automáticamente el contenido de la revisión allí. Se hará manipulando el dom.

Además, agregue una identificación a su botón de edición, en este ejemplo, le he dado una identificación "editFormButton".

Del mismo modo, agregue una identificación al div en el que se encuentra el contenido de la revisión para que sea más fácil de seleccionar, le he dado una identificación "reviewContent"

Del mismo modo, agregue una identificación a edit_review_form.review como esta edit_review_form.review(id='editReviewContent')

 <script> $(document).on("click", "#editFormButton", function (e) { var reviewText = $(this) .parents("div.row") .siblings("div.p-3.row") .children("div#reviewContent") .children() .text(); $("input#editReviewContent").val(reviewText); }); </script>

No olvides incluir jQuery.

Además, puedes hacerlo con javascript puro. Puede buscar fácilmente los equivalentes anteriores en Google. ¡Este artículo es un buen comienzo!

over 4 years ago · Santiago Trujillo 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