如何使用django-import-export导出属性值

时间:2016-08-18 13:00:48

标签: python django django-import-export

我的模特:

class TreeNode(MPTTModel):
    ...
    @property
    def pay_progress(self):
        return "{}/{}".format(self.annuities.exclude(fact_date=None).aggregate(Sum('total'))['total__sum'] or 0,
                             self.annuities.aggregate(Sum('total'))['total__sum'])

资源:

from import_export import resources
from models import TreeNode


class TreeNodeResource(resources.ModelResource):
    class Meta:
        model = TreeNode

查看:

def export_treenode_csv(request):
    treenode_resource = TreeNodeResource()
    dataset = treenode_resource.export()
    response = HttpResponse(dataset.xls, content_type='application/vnd.ms-excel')
    response['Content-Disposition'] = 'attachment; filename="TreeNode.xls"'

    return response

但是此代码仅导出存储在数据库中的字段。如何将pay_progress属性值添加到导出的报告中?

1 个答案:

答案 0 :(得分:4)

您可以利用dehydrate_<fieldname>方法:

class TreeNodeResource(resources.ModelResource):
    pay_progress = fields.Field()

    class Meta:
        model = TreeNode

    def dehydrate_pay_progress(self, node):
        return node.pay_progress

我发现它有点单调乏味;如果某人有更好的解决方案,请不要犹豫不决。

修改 您可以使用attribute的命名参数Field来获取对象属性/属性,而无需使用 dehydrate()

class TreeNodeResource(resources.ModelResource):
    pay_progress = fields.Field(attribute='pay_progress')

    class Meta:
        model = TreeNode

使用双下划线也可以follow relationships