Возможно, я не сформулировал этот вопрос лучше, но я хотел бы знать, что было бы хорошим / лучшим способом для обработки множественных возможностей запроса из шаблона?
Например У меня есть шаблон, который отображает форму вместе со всеми вложениями, которые хранятся в отдельной таблице, но имеют непосредственное отношение к текущей записи. Таким образом, у меня есть кнопка отправки для формы, и у меня также есть 2 другие кнопки, которые предназначены для добавления и удаления вложений из отдельной таблицы.
Я обработал добавление вложения, используя атрибут name
в теге input
. Сначала я думал сделать то же самое с удалением, но у меня не было способа передать ID
записи в функцию просмотра, поэтому я создал отдельный URL для обработки этого запроса. Проблема с этим подходом заключается в том, что я больше не могу передать тот же экземпляр формы пользователю. Когда пользователь нажимает «удалить», он в основном сбрасывает форму.
Является ли типичным / предпочтительным создание некоторых URL-адресов исключительно для обработки запросов?
У меня такое ощущение, что лучшим ответом будет использование запросов AJAX, но я пытаюсь заставить функционирование работать до того, как я внесу изменения по соображениям производительности.
Я включил все функции ниже, но я просто обеспокоен тем, как обрабатываются запросы, и должен ли я делать что-то по-другому.
Views.py
def create_req(request):
all_attachments = TempAttachments.objects.filter(username=request.user)
if request.method == 'POST':
req_form = ReqForm(request.POST, request.FILES)
if request.POST.get("Add") and len(request.FILES) != 0:
add_attachment = TempAttachments.objects.create(attachment=request.FILES['attachment'], username=request.user)
elif req_form.is_valid():
cur_user = CustomUser.objects.get(username=request.user)
basket_item = ReqBasket.objects.create(user=cur_user,
description = req_form.cleaned_data['description'].capitalize(),
extra_information = req_form.cleaned_data['extra_information'],
quantity = req_form.cleaned_data['quantity'],
price = req_form.cleaned_data['price'],
total_price = req_form.cleaned_data['quantity']*req_form.cleaned_data['price'],
assistance = req_form.cleaned_data['assistance'],
catagory = req_form.cleaned_data['catagory'])
return redirect(reverse('requisition:basket'))
else:
req_form = ReqForm(request.POST)
else:
req_form = ReqForm()
return render(request, 'req/create_req.html', {'req_form': req_form, 'all_attachments': all_attachments})
def remove_temp_attachment(request, id):
attachment = get_object_or_404(TempAttachments, id=id, username=request.user)
if request.method == 'POST':
req_form = ReqForm(request.POST, request.FILES)
attachment.delete()
return redirect(reverse('requisition:create_req'), {'req_form':req_form})
else:
return redirect(reverse('requisition:create_req'))
Template.py - Извините, не могу запустить загрузчик
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
{% extends 'registration/home.html' %}
{% load static %}
{% block content %}
<h1>New Requisition</h1>
<form method="post" action="{% url 'requisition:create_req' %}" enctype="multipart/form-data">
{% csrf_token %}
<table>
{% for field in req_form.visible_fields %}
{% ifnotequal field.label 'Notes' %}
{% if field.label == 'Attachment' %}
<tr>
<th>{{ field.label_tag }}</th>
<td>
{{ field }}
</td>
<td>
<input type="submit" value="Add" name="Add">
</td>
</tr>
{% else %}
<tr>
<th>{{ field.label_tag }}</th>
<td>
{{ field }}
</td>
</tr>
{% endif %}
{% endifnotequal %}
{% endfor %}
</table>
<input type="submit" value="Add To Basket">
</form>
<a href="{% url 'requisition:basket' %}">Back</a>
<table class='table'>
{% if all_attachments %}
{% for attachment in all_attachments %}
<tr>
<td>
<a href="{% get_media_prefix %}/{{attachment.attachment}}">{{attachment}}</a>
</td>
<td>
<form action="{% url 'requisition:remove_temp_attachment' attachment.id %}" method="POST">
{% csrf_token %}
<input type="submit" value="Delete">
</form>
</td>
</tr>
{% endfor %}
{% endif %}
</table>
{% endblock content %}