Django : Передача данных в другое представление с помощью кнопки
У меня есть таблица клиентов, где в каждой строке есть кнопка для перенаправления на другую страницу с id клиента. Я не хочу, чтобы это было в URL, поэтому я хочу избежать метода GET, именно поэтому я подумал использовать метод POST с кнопками
Я кое-что сделал, но это не работает, у меня есть сообщение об ошибке "Метод не разрешен (POST)" с определенным URL.
html
<table id="customers" class="table table-sortable">
<tr>
<th>Référence Client</th>
<th>Client</th>
<th>Edit</th>
</tr>
{% for client in query_list_client %}
<tr>
<td>{{ client.id }}</td>
<td>{{ client }}</td>
<td>
<a href="{% url 'modifyclient' uuid_contrat uuid_group % }" class="btn btn-primary" >Modify</a>
<form action="{% url 'selectsaletype' uuid_contrat uuid_group %}" method="POST">
{% csrf_token %}
<button name = 'client' type ='submit' value="{{ client.id }}" class='btn btn-secondary' > Select </button>
</form>
<!-- <a href="{% url 'selectsaletype' uuid_contrat uuid_group client.id % }" class="btn btn-secondary" >Selectionner</a> -->
</td>
</tr>
{% endfor %}
</table>
урлы
urlpatterns = [
path('<str:uuid_contrat>/<str:uuid_group>/sales/selectclient/', ListSelectClient.as_view(), name="selectclient"),
path('<str:uuid_contrat>/<str:uuid_group>/sales/selectsaletype/', SelectSaletType.as_view(), name="selectsaletype"),
]
просмотров
class SelectSaletType(ListView):
model = ListSaleType
paginate_by =10
template_name = 'sales/selectsaletype.html'
context_object_name = 'query_sale_type'
def get_context_data(self, *args, **kwargs) :
context = super(SelectSaletType, self).get_context_data(*args, **kwargs)
context['uuid_contrat'] = self.kwargs['uuid_contrat']
context['uuid_group'] = self.kwargs['uuid_group']
print(self.request.POST)
return context
def get_queryset(self):
# Get the UUID_CONTRAT
uuid_contrat = self.kwargs["uuid_contrat"]
id_contrat = Entity.objects.all().filter(uuid=uuid_contrat).values_list('id', flat=True)[0]
query = self.request.GET.get('search')
if query:
query_sale_type = self.model.objects.filter(Q(idcustomer=id_contrat)).order_by('-id')
else:
query_sale_type = self.model.objects.all().filter(idcustomer=id_contrat).order_by('-id')
return query_sale_type
Информация должна храниться между представлениями. Сервер не имеет статических данных. Варианты - в cookie браузера или в БД, если вы исключаете размещение в URL или в GET-параметре.
Django предоставляет session (через промежуточное ПО), который может хранить вещи либо в cookies, либо в БД в зависимости от конфигурации. Так что используйте это ( request.session
)