【问题标题】:Exporting the filtered data from a django table从 django 表中导出过滤后的数据
【发布时间】:2021-06-16 08:22:21
【问题描述】:

我正在使用 django-filter 和 django-import-export。我可以构建一个 HTML 表并使用 django-filter 对其进行过滤,但我希望用户能够导出过滤后的表,而不是整个表。 (也就是说,这不是通过管理员功能。)

怀疑问题是我对列表本身有一个视图,但导出在另一个视图中,我似乎无法将过滤后的查询集传递给导出视图,我无法弄清楚如何在同一视图上进行导出和过滤。它们都是 GET 请求。我觉得我在这里遗漏了一些非常基本的东西。

在我的 app/views.py 中:

from django.http import HttpResponse
from django.shortcuts import render
from .filters import RoleFilter
from .models import Role
from .resources import RoleResource

from tablib import Dataset

def role_list(request):
    """list the roles and filter appropriately"""
    f = RoleFilter(request.GET, queryset=Role.objects.all())
    return render(request, 'app/rolelist.html', {'filter': f})

def export_filtered_roles(request):
    """export to csv"""
    f = RoleFilter(request.GET, queryset=Role.objects.all())
    dataset = RoleResource.export(f)
    response = HttpResponse(dataset.csv, content_type="text/csv")
    response['Content-Disposition'] = 'attachment;filename="roles.csv"'
    return response

我似乎无法建立联系。这个版本的代码给了我一个错误:RoleFilter 对象没有属性'before-export'。如果我使用dataset = RoleResource.export(f.qs),我会得到同样的错误。

关于如何将过滤器绑定到导出视图有什么建议吗?


附加信息:这是我正在使用的模板

<form method="get" action=".">
    {{ filter.form.as_p }}
    <input type="submit" value="Filter"/>
</form>

<table>... loops through filter.qs ...</table>
<a href="{% url 'roleexport' %}">Export Roles</a>

这就是我认为 Form 对象和导出功能之间存在脱节的原因。我可以通过某种方式控制表单的导出吗?

【问题讨论】:

    标签: django-filter django-import-export


    【解决方案1】:

    这似乎是一个 hack,但它确实有效。我所要做的就是更改模板中的链接:

    <a href="{% url 'roleexport' %}?{{request.GET.urlencode}}">Export Roles</a>
    

    这适用于过滤和未过滤的列表。

    【讨论】:

      【解决方案2】:

      我认为这行看起来不正确:

      dataset = RoleResource.export(f)
      

      您在类上调用export(),而不是类的实例。

      如果你尝试会发生什么:

      dataset = RoleResource().export(f.qs)
      

      正如您所说,export() 将查询集作为参数,而不是过滤器,因此请确保您从过滤器传递 qs,而不是过滤器本身。

      【讨论】:

      猜你喜欢
      • 2021-12-23
      • 2020-09-14
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多