django-import-export 打印选中的数据,不继承ExportActionMixin
时间: 2024-02-12 09:09:17 浏览: 138
如果您使用的是 Django-import-export 库,想要在不继承 `ExportActionMixin` 的情况下打印选中的数据,可以使用以下代码实现:
1. 在您的 admin.py 中,定义一个 `export_selected_objects` 方法:
```
from django.http import HttpResponse
import csv
def export_selected_objects(modeladmin, request, queryset):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="selected_objects.csv"'
writer = csv.writer(response)
# 获取选中对象的所有字段名
header = [field.name for field in queryset.model._meta.fields]
writer.writerow(header)
# 写入选中对象的数据
for obj in queryset:
row = [getattr(obj, field) for field in header]
writer.writerow(row)
return response
export_selected_objects.short_description = "导出选中的对象"
```
2. 在您的 admin.py 中,将 `export_selected_objects` 方法注册为一个 action:
```
from django.contrib import admin
from import_export.admin import ImportExportModelAdmin
from .models import MyModel
class MyModelAdmin(ImportExportModelAdmin):
list_display = ('field1', 'field2', 'field3')
actions = ['export_selected_objects']
def export_selected_objects(modeladmin, request, queryset):
# 定义 export_selected_objects 方法,参考上面的代码
admin.site.register(MyModel, MyModelAdmin)
```
3. 在您的模板中,添加一个 "导出选中的对象" 的按钮:
```
{% extends "admin/change_list.html" %}
{% load i18n admin_urls %}
{% block object-tools-items %}
{% if cl.result_count %}
<li>
<a href="{% url opts|admin_urlname:'export_selected_objects' %}?{{ cl.get_query_string|urlencode }}"
class="export-selected">
导出选中的对象
</a>
</li>
{% endif %}
{{ block.super }}
{% endblock %}
```
4. 在您的模板中,添加以下 JavaScript 代码:
```
<script>
$(function() {
$('.export-selected').click(function() {
var checked_ids = $('input:checked').map(function() {
return $(this).val();
}).get().join(',');
var href = $(this).attr('href');
href += '&_selected_action=' + checked_ids;
$(this).attr('href', href);
});
});
</script>
```
这样,当您选择一些记录并点击 "导出选中的对象" 按钮时,将会以 CSV 格式导出这些记录。如果您需要导出其他格式(如 Excel),可以修改 `export_selected_objects` 方法中的代码。
阅读全文