Django-import-export - 导入高级字段?

Dav*_*ric 7 python django django-models satchmo django-import-export

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

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

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() )
Run Code Online (Sandbox Code Playgroud)

它确实运作良好,但仅适用于出口.那么进口,反向过程呢?dehydrate_方法有一些对应的吗?

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

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)
Run Code Online (Sandbox Code Playgroud)

但怀疑这是正确的方法.

将不胜感激任何提示如何处理自定义字段的导入.

bmi*_*lac 5

您可以import_obj改为覆盖。有关更多详细信息,请参阅导入工作流程

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