如何在使用 Django import_export 的 import_data 方法时提供 "result.has_errors()" 和 "result.has_validation_errors()" 属性
How to provide the "result.has_errors()" and "result.has_validation_errors()" attributes when using import_data method for Django import_export
我需要更改使用 Django 模块 import_Export
导入的 csv 文件。我为此实现了 import_data
方法,但出现错误 'Dataset' object has no attribute 'has_errors'
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Program Files\Python36\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Program Files\Python36\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Program Files\Python36\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "C:\Program Files\Python36\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "C:\Program Files\Python36\lib\site-packages\django\contrib\admin\sites.py", line 231, in inner
return view(request, *args, **kwargs)
File "C:\Program Files\Python36\lib\site-packages\import_export\admin.py", line 316, in import_action
if not result.has_errors() and not result.has_validation_errors():
Exception Type: AttributeError at /admin/engine/mtg/import/
Exception Value: 'Dataset' object has no attribute 'has_errors'
当我 return 我的自定义数据集时,如何提供 result.has_error()
和 result.has_validation_errors()
以避免此错误?这是我实现方法的地方
Admin
class ModelResource(resources.ModelResource):
def import_data(self, dataset, dry_run=False, raise_errors=True,use_transactions=None, collect_failed_rows=False, **kwargs):
new_dataset = do_stuff(dataset)
return new_dataset
文档指出 import_data
方法所做的第一件事是创建一个包含错误信息的“结果”实例。我假设这可能是我需要的?但我不知道如何使用我的新数据集[导入数据工作流程][1]
或 return 访问它
[1]: https://django-import-export.readthedocs.io/en/latest/import_workflow.html?highlight=before)导入
您不需要覆盖 has_errors()
和 has_validation_errors()
,因为应该为您处理逻辑。
通常你不应该覆盖 import_data()
因为这是导入逻辑发生的地方。将有效的 Dataset
对象作为第一个参数传递给 import_data()
。我建议快速浏览一下 source,因为这会弄清楚发生了什么。
如果您需要修改导入的数据,可以使用几个挂钩。这是您对基础资源进行子类化并添加您自己的逻辑的地方。
本例基于django-import-export example app:
class BookResource(resources.ModelResource):
def before_import_row(self, row, row_number=None, **kwargs):
"""
Override to add additional logic.
"""
pass
def before_save_instance(self, instance, using_transactions, dry_run):
"""
Override to add additional logic.
"""
pass
class Meta:
model = Book
fields = ('id', 'author_email', 'price')
然后你可以这样调用:
rows = [
('book1', 'email@example.com', '10.25'),
('book2', 'email@example.com', '10.25'),
('book1', 'email@example.com', '10.25'),
]
dataset = tablib.Dataset(*rows, headers=['name', 'author_email', 'price'])
book_resource = BookResource()
result = book_resource.import_data(dataset)
print(result.totals)
我需要更改使用 Django 模块 import_Export
导入的 csv 文件。我为此实现了 import_data
方法,但出现错误 'Dataset' object has no attribute 'has_errors'
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Program Files\Python36\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Program Files\Python36\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Program Files\Python36\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "C:\Program Files\Python36\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "C:\Program Files\Python36\lib\site-packages\django\contrib\admin\sites.py", line 231, in inner
return view(request, *args, **kwargs)
File "C:\Program Files\Python36\lib\site-packages\import_export\admin.py", line 316, in import_action
if not result.has_errors() and not result.has_validation_errors():
Exception Type: AttributeError at /admin/engine/mtg/import/
Exception Value: 'Dataset' object has no attribute 'has_errors'
当我 return 我的自定义数据集时,如何提供 result.has_error()
和 result.has_validation_errors()
以避免此错误?这是我实现方法的地方
Admin
class ModelResource(resources.ModelResource):
def import_data(self, dataset, dry_run=False, raise_errors=True,use_transactions=None, collect_failed_rows=False, **kwargs):
new_dataset = do_stuff(dataset)
return new_dataset
文档指出 import_data
方法所做的第一件事是创建一个包含错误信息的“结果”实例。我假设这可能是我需要的?但我不知道如何使用我的新数据集[导入数据工作流程][1]
[1]: https://django-import-export.readthedocs.io/en/latest/import_workflow.html?highlight=before)导入
您不需要覆盖 has_errors()
和 has_validation_errors()
,因为应该为您处理逻辑。
通常你不应该覆盖 import_data()
因为这是导入逻辑发生的地方。将有效的 Dataset
对象作为第一个参数传递给 import_data()
。我建议快速浏览一下 source,因为这会弄清楚发生了什么。
如果您需要修改导入的数据,可以使用几个挂钩。这是您对基础资源进行子类化并添加您自己的逻辑的地方。
本例基于django-import-export example app:
class BookResource(resources.ModelResource):
def before_import_row(self, row, row_number=None, **kwargs):
"""
Override to add additional logic.
"""
pass
def before_save_instance(self, instance, using_transactions, dry_run):
"""
Override to add additional logic.
"""
pass
class Meta:
model = Book
fields = ('id', 'author_email', 'price')
然后你可以这样调用:
rows = [
('book1', 'email@example.com', '10.25'),
('book2', 'email@example.com', '10.25'),
('book1', 'email@example.com', '10.25'),
]
dataset = tablib.Dataset(*rows, headers=['name', 'author_email', 'price'])
book_resource = BookResource()
result = book_resource.import_data(dataset)
print(result.totals)