Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django导入-导入高级字段?_Python_Django_Django Models_Satchmo_Django Import Export - Fatal编程技术网

Python Django导入-导入高级字段?

Python Django导入-导入高级字段?,python,django,django-models,satchmo,django-import-export,Python,Django,Django Models,Satchmo,Django Import Export,对于Django模型,我使用包 如果需要导出比仅可用的模型字段更多的字段,如属性或自定义字段,则可以使用import\u export.fields.Field类和可选的脱水方法添加新字段 from import_export import resources, fields, instance_loaders class ProductResource(resources.ModelResource): categories = fields.Field() price

对于Django模型,我使用包

如果需要导出比仅可用的模型字段更多的字段,如属性或自定义字段,则可以使用
import\u export.fields.Field
类和可选的
脱水方法添加新字段

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() )
它确实工作得很好,但只适用于出口。那进口呢,反向过程呢?是否有类似的脱水方法

到目前为止,我已经重写了
get\u或\u init\u实例
方法:

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)
但我怀疑这是正确的方法


如果您能提供任何有关如何处理自定义字段导入的提示,我们将不胜感激。

您可以替代
import\u obj
。有关更多详细信息,请参阅


另一种方法是对
导出
保存
方法进行子类化和重写,并在字段中执行所有必需的数据操作。

我知道这很老,但我遇到了相同的问题,我就是这样解决的(基于原始asker的标题方向)。 首先,您可以通过覆盖“before\u import\u row”函数添加所需的任何自定义/修改字段,如下所示:

导入前定义行(self,row,**kwargs): 行['extra_info']='Some info' 返回超级(RetailLocationResource,self)。导入前\u行(行,**kwargs)
然后,您可以通过覆盖get_或_init_实例将其传递到实例中,如下所示:

def get_或_init_实例(self,instance_loader,row):
实例,bool=super(RetailLocationResource,self)。获取或初始化实例(实例加载程序,行)
instance.extra\u info=行['extra\u info']
返回实例,bool

希望这对任何人都有帮助

谢谢。当然,重写字段方法是一个好主意,但我只是想知道是否已经有某种方法可以导入以前使用
deterhemate\uu
方法导出的自定义字段内容。我不喜欢重新发明轮子。我问了类似的问题,也许你可以帮助你的django进出口经验?