【问题标题】:filter on django-import-export过滤 django-import-export
【发布时间】:2013-07-22 14:36:02
【问题描述】:

我想从我的模型创建 csv 文件,将查询字典(过滤器排除)发送到 django-import-export 并从我的模型返回数据。

使用流动代码,我拥有所有模型字段,但我需要使用查询过滤它们。

from import_export import resources
from finance.models import Price

class ExportData(resources.ModelResource):

    class Meta:
        model = Price

【问题讨论】:

  • 你到底想过滤什么?

标签: django django-models django-import-export


【解决方案1】:

queryset 传递给导出方法:

queryset = Price.objects.exclude(...)
data = ExportData().export(queryset)
data.csv

【讨论】:

  • 我刚刚注意到,通过记录 django 实际执行的 SQL 查询,这显然会评估查询集,然后进行 queryset.count() 单个 SQL 查询以生成 CSV。不酷
  • 我按照此答案中的说明进行操作,现在我收到此错误:'QuerySet' object has no attribute 'before_export'。这对我来说毫无意义,因为异常是在 import_export.resources.Resource 而不是 django.models.query.QuerySet 类的导出方法中引发的。我错过了什么?
【解决方案2】:

要仅过滤导出的文件而不是管理屏幕中的实际列表,您可以覆盖get_export_queryset 方法

from import_export import resources
from import_export.admin import ImportExportMixin

class ProductAdmin(ImportExportMixin, admin.ModelAdmin):
    resource_class = ProductResource

    # Override of ImportExportMixin.get_export_queryset
    # Filter export to exclude Products where is_active is false
    def get_export_queryset(self, request):
            return Product.objects.filter(is_active=True)

【讨论】:

【解决方案3】:

您可以在admin.py 文件中覆盖resources.ModelResourceexport 方法,以在管理员上应用您的过滤器:

from import_export import resources
from finance.models import Price

class ExportData(resources.ModelResource):

    class Meta:
        model = Price

    def export(self, queryset=None, *args, **kwargs):
        # For example only export objects with ids in 1, 2, 3 and 4
        queryset = queryset and queryset.filter(id__in=[1, 2, 3, 4])
        return super(ExportData, self).export(queryset, *args, **kwargs)

【讨论】:

  • @Omida Raha。如果我的过滤器来自下拉选择,我会怎么做???
猜你喜欢
  • 2021-11-14
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 2020-11-09
  • 2021-12-13
  • 2020-04-23
相关资源
最近更新 更多