【问题标题】:Django-import-export - export from model's functions?Django-import-export - 从模型的函数中导出?
【发布时间】:2014-09-15 13:40:34
【问题描述】:

对于 Django 模型,我使用的是 django-import-export 包。

手册说我可以像这样导出目标模型中不存在的字段:

from import_export import fields

class BookResource(resources.ModelResource):
    myfield = fields.Field(column_name='myfield')

    class Meta:
        model = Book

http://django-import-export.readthedocs.org/en/latest/getting_started.html

如何从模型中导出函数的输出?例如Book.firstword()

【问题讨论】:

    标签: django django-admin django-import-export


    【解决方案1】:

    您应该这样做(查看https://django-import-export.readthedocs.org/en/latest/getting_started.html#advanced-data-manipulation):

    from import_export 导入字段、资源 类 BookResource(resources.ModelResource): firstword = fields.Field() def dehydrate_firstword(自我,书): 返回 book.firstword() 元类: 型号 = 书

    更新以回答 OP 评论

    要以特定顺序返回字段,您可以使用 export_order 元选项 (https://django-import-export.readthedocs.org/en/latest/api_resources.html?highlight=export_order#import_export.resources.ResourceOptions)。

    【讨论】:

    • 按要求工作 - 谢谢! “脱水”术语真的让我很反感。
    • 现在获得奖励 :) 我如何对输出进行排序,以便这个新字段是最后一列(没有明确指定每个字段)?
    • 阅读链接,手册非常少...据我了解,我必须按所需顺序列出所有输出字段?
    • 是的,不幸的是,您必须列出要导出的所有字段 - 当然您也可以做一些其他技巧,例如在 BookResource 中重新定义 get_export_order 以便它最后返回 firstowrd (在此处查看源代码github.com/bmihelac/django-import-export/blob/master/…)
    • 哇,还有很多工作......我想我会保持简单。再次感谢!
    【解决方案2】:

    与 Serafeim 建议的相比,还有一种代码更少的解决方案:

    from import_export import fields, resources
    
    class BookResource(resources.ModelResource):
        firstword = fields.Field(attribute='firstword')
    
        class Meta:
            model = Book
    

    【讨论】:

    • 像魅力一样工作。没想到会这么简单。谢谢,伙计。
    【解决方案3】:

    以防万一您需要获取该字段的完整 URL 并基于 @Serafeim 的解决方案

    class CompanyModelResource(ModelResource):
    
        def dehydrate_local_logo(self, company):
            if company.local_logo and hasattr(company.local_logo, 'url'):
                return company.local_logo.url
            return company.local_logo
    
        class Meta:
            model = Company
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 2021-03-13
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多