【发布时间】:2019-10-26 12:04:10
【问题描述】:
我有 Django 模型,其中包含 10 个人的数据(“姓名”和“状态”)。我在带有复选框的DataTable 中显示此模型,如果我选中一个框,它会将类更改为selected,例如<tr role="row" class="odd selected"
用户从DataTable 中进行选择并按下按钮(“通过电子邮件发送选择”)。选择将进入 Django 视图。我将编写代码过滤掉那些包含 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>
在网址中
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}
【问题讨论】:
-
不清楚您在这里要做什么。表格的数据来自哪里?
-
你想把数据表放到 Django 中,还是放到模板中?
-
抱歉,不清楚,我已经更新了问题并澄清了
-
但这仍然不清楚。您在该模板中没有任何复选框。
-
sry,为了不造成信息过载而试图经济,但显然会造成混乱。
标签: python django datatables