У меня есть модель Django, которая содержит данные («Имя» и «Статус») для 10 человек. Я отображаю эту модель в DataTable
с флажками, и если я устанавливаю флажок, она меняет класс на selected
, например, <tr role="row" class="odd selected"
. Пользователь делает выбор из DataTable
и нажимает кнопку. («Отправить выбор по электронной почте»). Выбор перейдет в Django View. Я напишу код, который отфильтровывает те, которые содержат selected
, получит его PK и отправит электронное письмо с информацией.
Однако на первом шаге у меня возникла проблема с получением объекта DataTable
в вид.
Аналогичным подходом было бы использование Multiselect
, но здесь я хочу видеть таблицу, а не окно формы.
Мое попытанное решениеэто поставить теги формы вокруг DataTable
, а затем прочитать таблицу, чтобы отфильтровать все, что является selected
.
Проблема, с которой я столкнулся в настоящее время, заключается в том, что я не могу вставить DataTable
в views.py
.
Итак, мой вопрос: как мне получить доступ к таблице в Django View?
Я пробовал оба POST
и GET
ниже, но объект запроса возвращается как None
$('#datatable').DataTable({
responsive: true,
columnDefs: [{
orderable: false,
className: 'select-checkbox',
targets: 0
}],
select: {
style: 'multi',
selector: 'td:first-child',
// selectRow: true
},
order: [
[1, 'asc']
],
language: {
searchPlaceholder: 'Search...',
sSearch: '',
lengthMenu: '_MENU_ items/page',
}
});
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/select/1.3.1/js/dataTables.select.min.js"></script>
</head>
<body>
<div class="container">
<form method="post" action="{% url 'product-send2' %}">
{% csrf_token %}
<div class="table-wrapper">
<table class="form-control table display responsive" id='datatable' style="width:100%;">
<thead>
<tr>
<th>Send</th>
<th>Name</th>
<th>Status</th>
</tr>
</thead>
<tbody>
{% for object in object_list %}
<tr>
<td></td>
<td>{{ object.name }}</td>
<td>{{ object.status }}</td>
<tr>
{% endfor %}
</tbody>
<tfoot>
</tfoot>
</table>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</body>
</html>
В URL
path('product/send/', send_product2, name='product-send2')
и в представлениях
def send_product2(request):
recipients = request.POST.get('datatable')
print(recipients)
return HttpResponseRedirect('/product/list')
Я пробовал варианты, такие как
recipients = request.GET.get('datatable')
и
recipients = request.POST.get('datatable', False)
Я не могу достать "object"
и не знаю, как его отладить.
В конце концов, он долженработать как мультиселект для формы (которая будет отправлена по электронной почте).
Я надеюсь, что смогу помочь с некоторыми подсказками, как прогрессировать.
Спасибо!
Когда яprint(request.__dict__)
выглядит как ниже
: <SimpleLazyObject: <function AuthenticationMiddleware.process_request.<locals>.<lambda> at 0x7f907ab5f680>>, '_messages': <django.contrib.messages.storage.fallback.FallbackStorage object at 0x7f907ab82b10>, '_body': b'csrfmiddlewaretoken=xxx_length=10', '_post': <QueryDict: {'csrfmiddlewaretoken': ['xxxxx'], 'datatable_length': ['10']}>, '_files': <MultiValueDict: {}>, 'csrf_processing_done': True}