#python #html #jquery #django #forms
#python #HTML #jquery #django #формы
Вопрос:
Я пытаюсь реализовать модальную форму, которая ориентирована на изменение комментария в сообщении, то, как я это сделал, все работает, проблема в том, что когда я нажимаю на кнопку отправки, она отправляет меня в html, в котором у меня есть модальный, и там я редактирую комментарий. когда я пытаюсь удалить URL-адрес в форме действия, которая переводит меня на вторую страницу моей формы, она выдает ошибку «локальная переменная ‘form’, на которую ссылаются перед назначением», также, если я помещаю, например, в действие формы, URL-адрес входа отправляет меня туда, но комментарий не обновляется и не редактируется.
Моя идея заключается просто в том, что когда я отправляю форму, модальная закрывается, и страница, на которой модальная была открыта с самого начала, перезагружается или просто появляется уже отредактированный комментарий.
если вам нужна дополнительная информация, я могу ее добавить.
views.py
@need_analyst_role
def comment_modify(request, comment_id):
if 'comment_edit' in request.POST:
form_comment = FormComment(request.POST)
if form_comment.is_valid():
comment_text = form_comment.cleaned_data['text']
comment = ModelRiskTracking.objects.get(id=comment_id)
comment.comment = comment_text
print(comment.comment)
comment.save()
else:
messages.error(request, 'Error!', extra_tags="danger")
context = {}
context['comment'] = ModelRiskTracking.objects.get(id=comment_id)
return render(request, 'analyst_pages/comment_edit.html', context = context)
modal.html
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h2 class="modal-title">Editar comentario</h2>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">amp;times;</span>
</button>
</div>
<form action="{% url 'soc_irisk_modify' comment_id=comment.id %}" method="POST">
{% csrf_token %}
<textarea type="text" name="text" class="form-control" rows="15">{{ comment.comment|safe }}</textarea>
<div class="modal-footer">
<input type="submit" value="Actualizar" name="comment_edit" onsubmit="setFormSubmitting()" class="btn btn-info btn-sm pull-right" />
</div>
</form>
</div>
</div>
Я открываю модальный режим с помощью кнопки, вызывающей функцию jQuery:
<script type="text/javascript">
function openModal(url){
$('#commentModal').load(url, function(){
$(this).modal('show');
});
}
</script>
<button type="button" class="btn btn-primary btn-sm pull-right" data-toggle="modal" data-target="#commentModal" onclick="openModal('{% url 'soc_comment_modify' comment_id=comment.id %}')">
Ответ №1:
при сохранении модели вам необходимо перенаправить пользователя
@need_analyst_role
def comment_modify(request, comment_id):
if 'comment_edit' in request.POST:
form_comment = FormComment(request.POST)
if form_comment.is_valid():
comment_text = form_comment.cleaned_data['text']
comment = ModelRiskTracking.objects.get(id=comment_id)
comment.comment = comment_text
print(comment.comment)
comment.save()
return redirect("some_url")
else:
messages.error(request, 'Error!', extra_tags="danger")
return redirect("some_url")
context = {}
context['comment'] = ModelRiskTracking.objects.get(id=comment_id)
return render(request, 'analyst_pages/comment_edit.html', context = context)
Комментарии:
1. это сработало, я пробовал раньше с «return HttpResponseRedirect», который я прочитал в другом ответе, но это не сработало, по-видимому, это было проще, чем это, большое вам спасибо за ваш ответ и время!!