django-import-export打印选中的数据
时间: 2023-10-10 14:10:58 浏览: 133
要打印选中的数据,您可以使用django-import-export提供的`ExportActionModelAdmin`和`ExportMixin`。
首先,在您的`admin.py`文件中导入`ExportActionModelAdmin`和`ExportMixin`:
```python
from import_export.admin import ExportActionModelAdmin, ExportMixin
```
然后,在您的`ModelAdmin`类中,继承`ExportActionModelAdmin`和`ExportMixin`:
```python
class MyModelAdmin(ExportActionModelAdmin, ExportMixin):
pass
```
接下来,在您的模板中,添加一个打印按钮,并使用JavaScript来获取选中的行并将其传递给您的打印视图。
```html
{% extends "admin/change_list.html" %}
{% block object-tools-items %}
<li>
<a href="#" id="print-selected">打印选中的数据</a>
</li>
{{ block.super }}
{% endblock %}
{% block extrahead %}
<script>
$(document).ready(function () {
$('#print-selected').click(function () {
var selected = $('input:checkbox:checked').map(function () {
return $(this).val();
}).get();
window.open('/admin/myapp/mymodel/print/?ids=' + selected.join(','));
});
});
</script>
{% endblock %}
```
在上面的代码中,我们添加了一个按钮,并在点击时使用jQuery来获取选中的行。然后,我们将选中的行的ID作为参数传递给我们的打印视图。
最后,在您的视图中,获取传递的ID并将其用于过滤查询集。然后,使用django-import-export的`ExportMixin`来导出选定的行。
```python
from django.http import HttpResponse
from import_export.admin import ExportMixin
class MyModelAdmin(ExportActionModelAdmin, ExportMixin):
def print_selected(self, request):
selected = request.GET.get('ids')
queryset = self.get_queryset(request).filter(pk__in=selected.split(','))
resource = self.get_export_resource_class()()
dataset = resource.export(queryset)
response = HttpResponse(dataset.csv, content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="selected_data.csv"'
return response
```
在上面的代码中,我们定义了一个名为`print_selected`的视图,并在其中获取传递的ID。然后,我们使用`get_queryset`方法获取查询集,并将其用于过滤选定的行。最后,我们使用`get_export_resource_class`方法获取资源类,并使用其`export`方法导出选定的行。
阅读全文