2014-03-26 67 views
2

我试图遵循import-export官方文档Django管理import_export模块:用于自定义导入

https://django-import-export.readthedocs.org/en/latest/import_workflow.html#import-data-method-workflow

但我仍然不知道如何将它粘到我的管理假设

  1. 我只想要字段的子集(我创建了带有列表字段的资源模型,但它在导入时崩溃了:KeyError full stack bellow。

  2. 凡 - 在该方法 - 我应该在我的管理类(继承当然ImportExportModelAdmin和使用规定resource_class)将负责我想以后确认发生一些自定义操作代码,即进口数据正确但之前将它们插入到数据库中。

我不是很高级的Django,并会感谢一些提示。 工作实现的例子将不胜感激,所以如果你在github上知道类似的东西 - 分享。

+0

1.请张贴堆栈跟踪,有可能是一些错字 2. resource_class你可以重载一些方法(在import_workflow中列出) – bmihelac

回答

0

你可以重写它作为

创建一个新的实例

def get_instance(self, instance_loader, row): 
    return False 

您自定义的保存

def save_instance(self, instance, real_dry_run): 
    if not real_dry_run: 
      try: 
       obj = YourModel.objects.get(some_val=instance.some_val) 
       # extra logic if object already exist 
      except NFCTag.DoesNotExist: 
       # create new object 
       obj = YourModel(some_val=instance.some_val) 
       obj.save() 

def before_import(self, dataset, dry_run): 

    if dataset.headers: 
     dataset.headers = [str(header).lower().strip() for header in dataset.headers] 

     # if id column not in headers in your file 
    if 'id' not in dataset.headers: 
     dataset.headers.append('id') 
+0

到达这里有一个相关的问题,但最好我可以告诉只需追加''“id”' ''headers''不会实例化一个空白列并导致''import_export''创建新记录并自动递增整数pk。附加完整的“None”值列(''dataset.append_col([无用于范围内的行(len(dataset))],header ='id'''),尽管这可能不是最优雅的解。 – shiftedPriors