Как экспортировать значения свойств с помощью 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 ответ
Решение
Вы можете воспользоваться методом dehydrate_
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
Также возможно следовать отношениям, используя двойное подчеркивание.