NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2610 most downloaded on PyPI
Django application and library for importing and exporting data with included admin integration.
Last release 5 months ago
05 May 2026
Release timing varies
gaps range from 2 weeks to 4 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
14 years old
110 releases · first in 2012
Changelog
Refactor lookup value retrieval in Field and CachedForeignKeyWidget ( 2146 )
Fix CachedForeignKeyWidget type mismatch on non-string lookup fields ( 2159 )
One column per quarter.
Changelog
Changelog
Changelog
Fix: file_name is None in before_import_row when skip_import_confirm=True ( 2129 )
Changelog
Changelog
Fix for export not retaining URI query params ( 2097 )
Changelog
Improved field value extraction for dict-based querysets ( 2098 )
Performance improvements for membership checks ( 2090 )
Fix ForeignKeyWidget export issue ( 2117 )
Improved documentation for clean() methods ( 2115 )
Documentation updates: JSONField export with attribute syntax ( 2100 )
Documentation updates: handling TooManyFieldsSent ( 2103 )
Updated Turkish translation ( 2101 )
Updated Czech translation ( 2111 )
Changelog
Allow specifying meta options in the model_resourcefactory ( 2078 )
Allow custom fields and methods in model_resourcefactory ( 2081 )
FAQ update to describe how to customize Excel exports ( 2088 )
Changelog
ui: fix error display twice issue on export field select page ( 2066 )
ui: add ‘select all’ fields toggle on export page ( 2068 )
Add Hebrew translation ( 2071 )
ui: fix display of non field errors on import ( 2075 )
Changelog
- Changelog
Add flag to ignore empty rows in XLSX import ( 2028 )
Add support for Django 5.2 ( 2037 )
Fix Chinese translation ( 2040 )
- Changelog
Clarify documentation on creating non-existent relations ( 2029 )
Update Turkish translations ( 2031 )
- Changelog
Handle QuerySets called with values() on export ( 2011 )
- Changelog
- Changelog
Updated Farsi translation ( 2008 )
Updated German translation ( 2012 )
fix for issue in 4.3.0 when xlsx (openpyxl) dependencies are not installed.
fix for issue in 4.3.0 when xlsx (openpyxl) dependencies are not installed.
Includes import / export management commands.
Includes import / export management commands.
Addition of import & export management commands ( 1992 )
Handle IllegalCharacterError in xlsx exports ( 2001 )
Add repr method to InvalidRow for improved debugging ( 2003 )
- Changelog
Removed dependency files in favour of pyproject.toml ( 1982 )
Documentation updates ( 1989 )
Fix crash on export of tz-aware datetime to binary formats ( 1995 )
- Changelog - Release notes
This release contains breaking changes. Please refer to release notes .
Upgraded tablib version ( 1627 )
Document overriding formats ( 1868 )
Consistent queryset creation in ModelAdmin export mixin ( 1890 )
Deprecated get_valid_export_item_pks() in favour of get_queryset() ( 1890 )
Improve deprecation warning for ExportViewFormMixin to report at point of class definition ( 1900 )
Fix export for fields with custom declared name ( 1903 )
Hide the “Resource” form when it only has one option ( 1908 )
Update date, time and datetime widget render method to handle derived instance ( 1918 )
Add support for Django 5.1 ( 1926 )
Accept numbers using the numeric separators of the current language in number widgets ( FloatWidget() , IntegerWidget() , DecimalWidget() ) ( 1927 )
Added warning for declared fields excluded from fields whitelist ( 1930 )
Fix v3 regression: handle native types on export to spreadsheet ( 1939 )
Fix export button displayed on change screen when export permission not assigned ( 1942 )
Fix crash for Django 5.1 when rows are skipped ( 1944 )
Allow callable in dehydrate method ( 1950 )
Fix crash when Resource fields declared incorrectly ( 1963 )
Updated dependencies ( 1979 )
This release contains breaking changes. Please refer to release notes.
Upgraded tablib version (1627)
Document overriding formats (1868)
Consistent queryset creation in ModelAdmin export mixin (1890)
Deprecated ~import_export.admin.ExportMixin.get_valid_export_item_pks in favour of ~import_export.admin.ExportMixin.get_queryset (1890)
Improve deprecation warning for ExportViewFormMixin to report at point of class definition (1900)
Fix export for fields with custom declared name (1903)
Hide the "Resource" form when it only has one option (1908)
Update date, time and datetime widget render method to handle derived instance (1918)
Add support for Django 5.1 (1926)
Accept numbers using the numeric separators of the current language in number widgets (~import_export.widgets.FloatWidget, ~import_export.widgets.IntegerWidget, ~import_export.widgets.DecimalWidget) (1927)
Added warning for declared fields excluded from fields whitelist (1930)
Fix v3 regression: handle native types on export to spreadsheet (1939)
Fix export button displayed on change screen when export permission not assigned (1942)
Fix crash for Django 5.1 when rows are skipped (1944)
Allow callable in dehydrate method (1950)
Fix crash when Resource fields declared incorrectly (1963)
Updated dependencies (1979)
- Changelog - Release notes
- Changelog - Release notes
Restore return value for deprecated method ~import_export.resources.Resource.get_fields (1897)
- Changelog - Release notes
Improve Error class ( 1882 )
Fix response content assertions ( 1883 )
Admin UI: display checkboxes before labels in export form ( 1884 )
deprecated unused method: get_fields() ( 1885 )
- Changelog - Release notes
remove django version check for custom storages ( 1889 )
- Changelog - Release notes
docs: clarify for_delete() documentation ( 1877 )
fix default Field returns empty string instead of ‘None’ ( 1872 )
revert setting default value for attribute ( 1875 )
- Changelog - Release notes
docs: clarify widget configuration ( 1865 )
Enable skip export confirm page ( 1867 )
- Changelog - Release notes
fix documentation to show correct method for reading form data on export ( 1859 )
Admin UI: display both field name and column name on export ( 1857 )
fix export declared field with custom column name ( 1861 )
fix declared fields do not have correct Widget class set ( 1861 )
docs: clarify changes to CharWidget in v4 ( 1862 )
refactor Resource to remove code duplication in export ( 1863 )
- Changelog - Release notes
Added additional test for export field order ( 1848 )
fix crash on import when relation has custom PK ( 1853 )
fix crash on export from action when instance has custom PK ( 1854 )
- Changelog - Release notes
Fix for invalid build due to malformed README.rst ( 1851 )
- Changelog - Release notes
Support widgets with CSS and JS media in ImportForm ( 1807 )
Documentation updates ( 1833 )
Clarified documentation when importing with import_id_fields ( 1836 )
re-add resource_class deprecation warning ( 1837 )
fixed Arabic translation for ‘import’ word ( 1838 )
- Changelog - Release notes
fix export with custom column name ( 1821 )
fix allow column_name to be declared in fields list ( 1822 )
fix clash between key_is_id and use_natural_foreign_keys ( 1824 )
remove unreachable code ( 1825 )
fix issue with widget assignment for custom ForeignKey subclasses ( 1826 )
performance: select of valid pks for export restricted to action exports ( 1827 )
fix crash on export with custom column name ( 1828 )
remove outdated datetime formatting logic ( 1830 )
- Changelog - Release notes
fix crash on export when model has no id ( 1802 )
fix Widget crash when django Field subclass is used ( 1805 )
fix regression: allow imports when default import_id_field is not present ( 1813 )
v4 release. - Changelog - Release notes
v4 release.
Removed v3 deprecations ( 1629 )
Deprecation of ExportViewFormMixin ( 1666 )
Refactor ordering logic ( 1626 )
Refactor ‘diff’ logic to avoid calling dehydrate methods
Refactor declarations of fields , import_order and export_order to fix ordering issues
refactor to export HTML / formulae escaping updates ( 1638 )
removed unused variable Result.new_record ( 1640 )
Refactor resources.py to standardise method args ( 1641 )
added specific check for missing import_id_fields ( 1645 )
Enable optional tablib dependencies ( 1647 )
added get_lookup_kwargs() to make it easier to override object lookup ( 1651 )
Standardised interface of render() ( 1657 )
Fix declaring existing model field(s) in ModelResource altering export order ( 1663 )
Added do_instance_save() helper method ( 1668 )
Enable defining Resource model as a string ( 1669 )
Support multiple Resources for export ( 1671 )
Support export from model change form ( 1687 )
Import form defaults to read-only field if only one format defined ( 1690 )
Updated Admin UI to track deleted and skipped Imports ( 1691 )
Added customizable MediaStorage ( 1708 )
Added customization of Admin UI import error messages ( 1727 )
Improve output of error messages ( 1729 )
Added feature: selectable fields for admin export view ( 1734 )
Added specific check for declared import_id_fields not in dataset ( 1735 )
added try / catch to add_instance_info() to handle unserializable instances ( 1767 )
Add form error if source file contains invalid header ( 1780 )
Remove unneeded format method overrides ( 1785 )
Support dynamic selection of Resource class based on request property ( 1787 )
dynamic widget parameters for CharField fixes ‘NOT NULL constraint’ error in xlsx ( 1485 )
fix cooperation with adminsortable2 ( 1633 )
Removed unused method utils.original()
Fix deprecated log_action method ( 1673 )
fix multiple inheritance not setting options ( 1696 )
Fix issue where declared Resource fields not defined in fields are still imported ( 1702 )
Fixed handling of FieldError during Admin import ( 1755 )
Fixed handling of django FieldError during Admin export ( 1756 )
Add check for type to render() ( 1757 )
fix: YAML export does not work with SafeString ( 1762 )
fix: render() crashes if value is None ( 1771 )
fix form not being passed to get_import_resource_kwargs() ( 1789 )
Fix: Missing default widget for PositiveBigIntegerField ( 1795 )
Refactor build process ( 1630 )
Refactored test_admin_integration() : split into smaller test modules ( 1662 )
Refactored test_resources() : split into smaller test modules ( 1672 )
Updated docker-compose command with latest version syntax in runtests.sh ( 1686 )
Refactored resources into separate modules for declarative and options ( 1695 )
Refactored tests to remove dependencies between tests ( 1703 )
Handle python3.12 datetime deprecations ( 1705 )
Refactor test_resources.py into smaller modules ( 1733 )
Updated test coverage to include error row when collect_failed_rows is True ( 1753 )
Removed support for django 3.2 ( 1790 )
Added test for widgets generating by model fields 1795 )
Clarified skip_diff documentation ( 1655 )
Improved documentation relating to validation on import ( 1665 )
Added FAQ entry for exporting large datasets ( 1706 )
Relocated admin integration section from advanced_usage.rst into new file ( 1713 )
Updated Admin integration documentation to clarify how to save custom form values ( 1746 )
Fix slow export with ForeignKey id ( 1717 )
updated translations for release-4 ( 1775 )
v4 release. Please refer to CHANGELOG.
v4 release. Please refer to CHANGELOG.
v4 release. Please refer to CHANGELOG.
v4 release. Please refer to CHANGELOG.
v4 release. Please refer to CHANGELOG.
v4 release. Please refer to CHANGELOG.
v4 release. Please refer to CHANGELOG.
v4 release. Please refer to CHANGELOG.
Beta v4 release. Please refer to CHANGELOG.
Beta v4 release. Please refer to CHANGELOG.
Nothing published for this version
Beta v4 release. Please refer to CHANGELOG.
Beta v4 release. Please refer to CHANGELOG.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Patch release - refer to changelog
Patch release - refer to changelog
Patch release - refer to changelog
Patch release - refer to changelog
Add additional django template block for extending import page ( 1776 )
Patch release - refer to changelog
Patch release - refer to changelog
Pass get_export_resource_kwargs() to Resource constructor export_action() ( 1739 )
Fix issue with model class passed to Resource constructor crashing on export ( 1745 )
Fix indentation for skip_row docstring ( 1743 )
Return kwargs by default from get_resource_kwargs() ( 1748 )
Pass ~import_export.mixins.BaseExportMixin.get_export_resource_kwargs to Resource constructor ~import_export.admin.ExportMixin.export_action (1739)
Fix issue with model class passed to Resource constructor crashing on export (1745)
Fix indentation for skip_row docstring (1743)
Return kwargs by default from ~import_export.mixins.BaseImportExportMixin.get_resource_kwargs (1748)
Patch release - refer to changelog
Patch release - refer to changelog
Fix issue with highlight when using ‘light’ color scheme ( 1728 )
Patch release - refer to changelog
Patch release - refer to changelog
Remove unnecessary ChangeList queries to speed up export via Admin UI ( 1715 )
Respect color scheme override ( 1720 )
Update FAQ to cover skipping rows with validation errors ( 1721 )
- Added support for django5 ( 1634 )
Added support for django5 ( 1634 )
Show list of exported fields in Admin UI ( 1685 )
Added CONTRIBUTING.md
Added support for python 3.12 ( 1698 )
Update Finnish translations ( 1701 )
Patch release. See changelog.
Patch release. See changelog.
export_admin_action() can be overridden by subclassing it in the ModelAdmin ( 1681 )
~import_export.admin.ExportActionMixin.export_admin_action can be overridden by subclassing it in the ModelAdmin (1681)
Patch release. Please refer to CHANGELOG.
Patch release. Please refer to CHANGELOG.
Updated Spanish translations ( 1639 )
Added documentation and tests for retrieving instance information after import ( 1643 )
render() returns None as empty string if coerce_to_string is True ( 1650 )
Updated documentation to describe how to select for export in Admin UI ( 1670 )
Added catch for django5 deprecation warning ( 1676 )
Updated and compiled message files ( 1678 )
Updated Spanish translations (1639)
Added documentation and tests for retrieving instance information after import (1643)
~import_export.widgets.NumberWidget.render returns None as empty string if coerce_to_string is True (1650)
Updated documentation to describe how to select for export in Admin UI (1670)
Added catch for django5 deprecation warning (1676)
Updated and compiled message files (1678)
- Added .readthedocs.yaml ( 1625 )
Added .readthedocs.yaml ( 1625 )
- Remove ‘escape output’ deprecation ( 1618 )
Remove ‘escape output’ deprecation ( 1618 )
Removal of deprecated IMPORT_EXPORT_ESCAPE_OUTPUT_ON_EXPORT .
Deprecation of IMPORT_EXPORT_ESCAPE_HTML_ON_EXPORT . Refer to installation docs.
Refactoring and fix to support filtering exports ( 1579 )
Store instance and original object in RowResult ( 1584 )
Add customizable blocks in import.html ( 1598 )
Include ‘allowed formats’ settings ( 1606 )
Add kwargs to enable CharWidget to return values as strings ( 1623 )
Add Finnish translation ( 1588 )
Updated ru translation ( 1604 )
Fixed badly formatted translation string ( 1622 )
Remove ‘escape output’ deprecation ( 1618 )
Do not decode bytes when writing to MediaStorage ( 1615 )
Fix for cache entries not removed ( 1621 )
Added support for Django 4.2 ( 1570 )
Add automatic formatting and linting ( 1571 )
removed duplicate admin integration tests ( 1616 )
Removed support for python3.7 and django4.0 (past EOL) ( 1618 )
Updated documentation for interoperability with third party libraries ( 1614 )
- This includes deprecation of IMPORT_EXPORT_ESCAPE_OUTPUT_ON_EXPORT .
Escape formulae on export to XLSX ( 1568 )
This includes deprecation of IMPORT_EXPORT_ESCAPE_OUTPUT_ON_EXPORT .
Refer to installation for alternatives.
import_export.formats.TablibFormat.export() : escape_output flag now deprecated in favour of escape_html and escape_formulae .
Refactor methods so that args are declared correctly ( 1566 )
This includes deprecations to be aware of if you have overridden export() or ImportExportFormBase .
export() : If passing queryset as the first arg, ensure this is passed as a named parameter.
ImportExportFormBase : If passing resources to init as the first arg, ensure this is passed as a named parameter.
Updated setup.py ( 1564 )
Added SECURITY.md ( 1563 )
Updated FAQ to include workaround for RelatedObjectDoesNotExist exception ( 1562 )
Prevent error comparing m2m field of the new objects ( 1560 )
Add documentation for passing data from admin form to Resource ( 1555 )
Added new translations to Spanish and Spanish (Argentina) ( 1552 )
Pass kwargs to import_set function ( 1448 )
- fix xss vulnerability in html export ( 1546 )
Float and Decimal widgets use LANGUAGE_CODE on export ( 1501 )
Add optional dehydrate method param ( 1536 )
exceptions module has been undeprecated
Updated DE translation ( 1537 )
Add option for single step import via Admin Site ( 1540 )
Add support for m2m add ( 1545 )
collect errors on bulk operations ( 1541 )
this change causes bulk import errors to be logged at DEBUG level not EXCEPTION.
Improve bulk import performance ( 1539 )
raise_errors has been deprecated as a kwarg in import_row()
Reduce memory footprint during import ( 1542 )
documentation updates ( 1533 )
add detailed format parameter docstrings to DateWidget and TimeWidget ( 1532 )
tox updates ( 1534 )
fix xss vulnerability in html export ( 1546 )
- use get_list_select_related in ExportMixin ( 1511 )
Support Python 3.11 ( 1508 )
use get_list_select_related in ExportMixin ( 1511 )
bugfix: handle crash on start-up when change_list_template is a property ( 1523 )
bugfix: include instance info in row result when row is skipped ( 1526 )
bugfix: add **kwargs param to Resource constructor ( 1527 )
- Updated django-import-export-ci.yml to fix node.js deprecation
Updated django-import-export-ci.yml to fix node.js deprecation
bugfix: DateTimeWidget.clean() handles tz aware datetime ( 1499 )
Updated translations for v3.0.0 release ( 1500 )
This release adds some deprecations which will be removed in a future release.
This release makes some minor changes to the public API. If you have overridden any methods from the resources or widgets modules, you may need to update your implementation to accommodate these changes.
This fixes an issue where ManyToMany fields are not checked correctly in skip_row() . This means that skip_row() now takes row as a mandatory arg. If you have overridden skip_row() in your own implementation, you will need to add row as an arg.
If you have overridden skip_row() you can choose whether or not to skip rows if validation errors are present. The default behavior is to not to skip rows if there are validation errors during import.
import_export.resources.save_instance() now takes an additional mandatory argument: is_create . If you have overridden save_instance() in your own code, you will need to add this new argument.
If you have overridden clean() then you should update your method definition to reflect this change.
widgets.ForeignKeyWidget / widgets.ManyToManyWidget : The unused *args param has been removed from init() . If you have overridden ForeignKeyWidget or ManyToManyWidget you may need to update your implementation to reflect this change.
Exceptions raised during the import process are now presented as form errors, instead of being wrapped in a <H1> tag in the response. If you have any custom logic which uses the error written directly into the response, then this may need to be changed.
Previous ImportForm implementation was based on Django’s forms.Form , if you have any custom ImportForm you now need to inherit from import_export.forms.ImportExportFormBase .
If you are using admin mixins from this library in conjunction with code that overrides change_list_template (typically admin mixins from other libraries such as django-admin-sortable2 or reversion), object tools in the admin change list views may render differently now.
If you have created a custom template which extends any import_export template, then this may now cause a recursion error (see 1415 <https://github.com/django-import-export/django-import-export/pull/1415 >_ )
If you have made customizations to the import template then you may need to refactor these after the addition of block declarations.
This release adds some deprecations which will be removed in a future release.
Add support for multiple resources in ModelAdmin. ( 1223 )
The *Mixin.resource_class accepting single resource has been deprecated and the new *Mixin.resource_classes accepting subscriptable type (list, tuple, …) has been added.
Same applies to all of the get_resource_class , get_import_resource_class and get_export_resource_class methods.
Deprecated exceptions.py ( 1372 )
Refactored form-related methods on ImportMixin / ExportMixin ( 1147 )
The following are deprecated:
get_import_form()
get_confirm_import_form()
get_form_kwargs()
get_export_form()
Default format selections set correctly for export action ( 1389 )
Added option to store raw row values in each row’s RowResult ( 1393 )
Add natural key support to ForeignKeyWidget ( 1371 )
Optimised default instantiation of CharWidget ( 1414 )
Allow custom change_list_template in admin views using mixins ( 1483 )
Added blocks to import template ( 1488 )
improve compatibility with previous ImportForm signature ( 1434 )
Refactored form-related methods on ImportMixin / ExportMixin ( 1147 )
Include custom form media in templates ( 1038 )
Remove unnecessary files generated when running tox locally ( 1426 )
Fixed Makefile coverage: added coverage combine
Fixed handling of LF character when using CacheStorage ( 1417 )
bugfix: skip_row() handles M2M field when UUID pk used
Fix broken link to tablib formats page ( 1418 )
Fix broken image ref in README.rst
bugfix: skip_row() fix crash when model has m2m field and none is provided in upload ( 1439 )
Fix deprecation in example application: Added support for transitional form renderer ( 1451 )
Increased test coverage, refactored CI build to use tox ( 1372 )
Clarified issues around the usage of temporary storage ( 1306 )
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →