From 6632a098c4a59a696ec08c706885e8317231690a Mon Sep 17 00:00:00 2001 From: Vladislav Date: Wed, 22 Nov 2023 16:12:42 +0500 Subject: [PATCH] Update handling of skipped errors --- import_export_extensions/resources.py | 9 +++++---- .../import_export_extensions/celery_import_results.html | 8 ++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/import_export_extensions/resources.py b/import_export_extensions/resources.py index d2bc5a5..e5d2cc7 100644 --- a/import_export_extensions/resources.py +++ b/import_export_extensions/resources.py @@ -1,6 +1,7 @@ import typing from enum import Enum +from django.core.exceptions import ValidationError from django.db.models import QuerySet from django.utils import timezone from django.utils.functional import classproperty @@ -43,8 +44,8 @@ class TaskState(Enum): class SkippedErrorsRowResult(results.RowResult): """Custom row result class with ability to store skipped errors in row.""" def __init__(self, *args, **kwargs): - self.non_field_skipped_errors: list[str] = [] - self.field_skipped_errors: dict[str, str] = dict() + self.non_field_skipped_errors: list[Error] = [] + self.field_skipped_errors: dict[str, list[ValidationError]] = dict() super().__init__() @property @@ -205,11 +206,11 @@ def import_row( imported_row.diff.append(row.get(field.column_name, "")) imported_row.non_field_skipped_errors.extend( - str(error.error) for error in imported_row.errors + imported_row.errors, ) if imported_row.validation_error is not None: imported_row.field_skipped_errors.update( - **imported_row.validation_error.message_dict, + **imported_row.validation_error.error_dict, ) imported_row.errors = [] imported_row.validation_error = None diff --git a/import_export_extensions/templates/admin/import_export_extensions/celery_import_results.html b/import_export_extensions/templates/admin/import_export_extensions/celery_import_results.html index 227df5e..b68240f 100644 --- a/import_export_extensions/templates/admin/import_export_extensions/celery_import_results.html +++ b/import_export_extensions/templates/admin/import_export_extensions/celery_import_results.html @@ -182,11 +182,15 @@

{{ row.skipped_errors_count}}
    - {% for field_name, error_message in row.field_skipped_errors.items %} + {% for field_name, errors in row.field_skipped_errors.items %}
  • {{ field_name }}
      -
    • {{ error_message }}
    • + {% for error in errors %} +
    • + {{ error }} +
    • + {% endfor %}
  • {% endfor %}