首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高级字段的Django- import -export -import?

高级字段的Django- import -export -import?
EN

Stack Overflow用户
提问于 2013-11-03 07:32:19
回答 2查看 6.9K关注 0票数 12

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

如果需要导出比可用模型字段更多的字段,如属性或自定义字段,可以使用import_export.fields.Field类和可选的dehydrate_<field>方法添加新的字段。

代码语言:javascript
复制
from import_export import resources, fields, instance_loaders

class ProductResource(resources.ModelResource):
    categories  = fields.Field()
    price       = fields.Field(attribute='unit_price')

    class Meta:
        model  = Product

    def dehydrate_categories(self, product):
        return ';'.join(
                '/%s' % '/'.join([c.name for c in cat.parents()] + [cat.name])
                for cat in product.category.iterator() )

它确实工作得很好,但只适用于导出。那么导入,也就是反向过程呢?有没有与dehydrate_方法相对应的方法?

到目前为止,我已经覆盖了get_or_init_instance方法:

代码语言:javascript
复制
class ProductResource(resources.ModelResource):
    def get_or_init_instance(self, instance_loader, row):
        row['unit_price'] = row['price']; row.pop('price')
        return super(ProductResource, self).get_or_init_instance(instance_loader, row)

但怀疑这是正确的方式。

我将感谢任何提示如何处理自定义字段的导入。

EN

回答 2

Stack Overflow用户

发布于 2013-11-06 20:33:25

您可以改写import_obj。有关更多详细信息,请参阅Import workflow

另一种方法是子类化Field,覆盖exportsave方法,并在字段中执行所有必需的数据操作。

票数 5
EN

Stack Overflow用户

发布于 2020-04-01 06:51:44

我知道这很古老,但我遇到了同样的问题,这就是我如何解决它的(基于最初的提问者的方向)。首先,您可以通过覆盖'before_import_row‘函数来添加所需的任何自定义/修改字段,如下所示:

代码语言:javascript
复制
    def before_import_row(self, row, **kwargs):
        row['extra_info'] = 'Some Info'
        return super(RetailLocationResource, self).before_import_row(row, **kwargs)

然后,您可以通过覆盖get_or_init_instance将其传递到您的实例中,如下所示:

代码语言:javascript
复制
    def get_or_init_instance(self, instance_loader, row):
        instance, bool = super(RetailLocationResource, self).get_or_init_instance(instance_loader, row)
        instance.extra_info = row['extra_info']
        return instance, bool

希望这对任何人都有帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19748124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档