docs/changelog.rst
.. warning::
If upgrading from v3, v4 introduces breaking changes. Please refer to :doc:`release notes<release_notes>`.
2146 <https://github.com/django-import-export/django-import-export/pull/2146>_)2159 <https://github.com/django-import-export/django-import-export/pull/2159>_)2142 <https://github.com/django-import-export/django-import-export/pull/2142>_)2132 <https://github.com/django-import-export/django-import-export/pull/2132>_)skip_import_confirm=True (2129 <https://github.com/django-import-export/django-import-export/pull/2129>_)2097 <https://github.com/django-import-export/django-import-export/pull/2097>_)2098 <https://github.com/django-import-export/django-import-export/pull/2098>_)2090 <https://github.com/django-import-export/django-import-export/pull/2090>_)2117 <https://github.com/django-import-export/django-import-export/pull/2117>_)clean() methods (2115 <https://github.com/django-import-export/django-import-export/pull/2115>_)2100 <https://github.com/django-import-export/django-import-export/pull/2100>_)2103 <https://github.com/django-import-export/django-import-export/pull/2103>_)2101 <https://github.com/django-import-export/django-import-export/pull/2101>_)2111 <https://github.com/django-import-export/django-import-export/pull/2111>_)model_resourcefactory<using_modelresource_factory> (2078 <https://github.com/django-import-export/django-import-export/pull/2078>_)model_resourcefactory<using_modelresource_factory> (2081 <https://github.com/django-import-export/django-import-export/pull/2081>_)2088 <https://github.com/django-import-export/django-import-export/pull/2088>_)2066 <https://github.com/django-import-export/django-import-export/pull/2066>_)2068 <https://github.com/django-import-export/django-import-export/pull/2068>_)2071 <https://github.com/django-import-export/django-import-export/pull/2071>_)2075 <https://github.com/django-import-export/django-import-export/pull/2075>_)2042 <https://github.com/django-import-export/django-import-export/pull/2042>_)2028 <https://github.com/django-import-export/django-import-export/issues/2028>_)2037 <https://github.com/django-import-export/django-import-export/pull/2037>_)2040 <https://github.com/django-import-export/django-import-export/issues/2040>_)2029 <https://github.com/django-import-export/django-import-export/issues/2029>_)2031 <https://github.com/django-import-export/django-import-export/issues/2031>_)values() on export (2011 <https://github.com/django-import-export/django-import-export/issues/2011>_)2014 <https://github.com/django-import-export/django-import-export/issues/2014>_)2008 <https://github.com/django-import-export/django-import-export/issues/2008>_)2012 <https://github.com/django-import-export/django-import-export/issues/2012>_)2005 <https://github.com/django-import-export/django-import-export/issues/2005>_)1992 <https://github.com/django-import-export/django-import-export/issues/1992>_)IllegalCharacterError in xlsx exports (2001 <https://github.com/django-import-export/django-import-export/issues/2001>_)__repr__ method to InvalidRow for improved debugging (2003 <https://github.com/django-import-export/django-import-export/issues/2003>_)pyproject.toml (1982 <https://github.com/django-import-export/django-import-export/issues/1982>_)1989 <https://github.com/django-import-export/django-import-export/issues/1989>_)1995 <https://github.com/django-import-export/django-import-export/issues/1995>_)This release contains breaking changes. Please refer to :doc:release notes<release_notes>.
1627 <https://github.com/django-import-export/django-import-export/issues/1627>_)1868 <https://github.com/django-import-export/django-import-export/issues/1868>_)1890 <https://github.com/django-import-export/django-import-export/pull/1890>_)~import_export.admin.ExportMixin.get_valid_export_item_pks in favour of :meth:~import_export.admin.ExportMixin.get_queryset (1890 <https://github.com/django-import-export/django-import-export/pull/1890>_)ExportViewFormMixin to report at point of class definition (1900 <https://github.com/django-import-export/django-import-export/pull/1900>_)1903 <https://github.com/django-import-export/django-import-export/pull/1903>_)1908 <https://github.com/django-import-export/django-import-export/issues/1908>_)1918 <https://github.com/django-import-export/django-import-export/issues/1918>_)1926 <https://github.com/django-import-export/django-import-export/issues/1926>_)~import_export.widgets.FloatWidget, :meth:~import_export.widgets.IntegerWidget, :meth:~import_export.widgets.DecimalWidget) (1927 <https://github.com/django-import-export/django-import-export/issues/1927>_)1930 <https://github.com/django-import-export/django-import-export/issues/1930>_)1939 <https://github.com/django-import-export/django-import-export/issues/1939>_)1942 <https://github.com/django-import-export/django-import-export/issues/1942>_)1944 <https://github.com/django-import-export/django-import-export/issues/1944>_)1950 <https://github.com/django-import-export/django-import-export/issues/1950>_)1963 <https://github.com/django-import-export/django-import-export/issues/1963>_)1979 <https://github.com/django-import-export/django-import-export/issues/1979>_)~import_export.resources.Resource.get_fields (1897 <https://github.com/django-import-export/django-import-export/pull/1897>_)1882 <https://github.com/django-import-export/django-import-export/pull/1882>_)1883 <https://github.com/django-import-export/django-import-export/pull/1883>_)1884 <https://github.com/django-import-export/django-import-export/pull/1884>_)~import_export.resources.Resource.get_fields (1885 <https://github.com/django-import-export/django-import-export/pull/1885>_)1889 <https://github.com/django-import-export/django-import-export/pull/1889>_)~import_export.resources.Resource.for_delete documentation (1877 <https://github.com/django-import-export/django-import-export/pull/1877>_)Field returns empty string instead of 'None' (1872 <https://github.com/django-import-export/django-import-export/pull/1872>_)attribute (1875 <https://github.com/django-import-export/django-import-export/pull/1875>_)1865 <https://github.com/django-import-export/django-import-export/pull/1865>_)1867 <https://github.com/django-import-export/django-import-export/pull/1867>_)1859 <https://github.com/django-import-export/django-import-export/pull/1859>_)1857 <https://github.com/django-import-export/django-import-export/pull/1857>_)1861 <https://github.com/django-import-export/django-import-export/pull/1861>_)1861 <https://github.com/django-import-export/django-import-export/pull/1861>_)CharWidget in v4 (1862 <https://github.com/django-import-export/django-import-export/pull/1862>_)~import_export.resources.Resource to remove code duplication in export (1863 <https://github.com/django-import-export/django-import-export/pull/1863>_)1848 <https://github.com/django-import-export/django-import-export/pull/1848>_)1853 <https://github.com/django-import-export/django-import-export/pull/1853>_)1854 <https://github.com/django-import-export/django-import-export/pull/1854>_)1851 <https://github.com/django-import-export/django-import-export/pull/1851>_)DateWidget & DateTimeWidget to remove code duplication (1839 <https://github.com/django-import-export/django-import-export/pull/1839>_)1840 <https://github.com/django-import-export/django-import-export/pull/1840>_)1843 <https://github.com/django-import-export/django-import-export/pull/1843>_)1849 <https://github.com/django-import-export/django-import-export/pull/1849>_)1807 <https://github.com/django-import-export/django-import-export/pull/1807>_)1833 <https://github.com/django-import-export/django-import-export/pull/1833>_)import_id_fields (1836 <https://github.com/django-import-export/django-import-export/pull/1836>_)resource_class deprecation warning (1837 <https://github.com/django-import-export/django-import-export/pull/1837>_)1838 <https://github.com/django-import-export/django-import-export/pull/1838>_)1821 <https://github.com/django-import-export/django-import-export/pull/1821>_)column_name to be declared in fields list (1822 <https://github.com/django-import-export/django-import-export/pull/1822>_)key_is_id and use_natural_foreign_keys (1824 <https://github.com/django-import-export/django-import-export/pull/1824>_)1825 <https://github.com/django-import-export/django-import-export/pull/1825>_)ForeignKey subclasses (1826 <https://github.com/django-import-export/django-import-export/pull/1826>_)1827 <https://github.com/django-import-export/django-import-export/pull/1827>_)1828 <https://github.com/django-import-export/django-import-export/pull/1828>_)1830 <https://github.com/django-import-export/django-import-export/pull/1830>_)id (1802 <https://github.com/django-import-export/django-import-export/pull/1802>_)1805 <https://github.com/django-import-export/django-import-export/pull/1805>_)import_id_field is not present (1813 <https://github.com/django-import-export/django-import-export/pull/1813>_)Deprecations ############
1629 <https://github.com/django-import-export/django-import-export/pull/1629>_)ExportViewFormMixin (1666 <https://github.com/django-import-export/django-import-export/pull/1666>_)Enhancements ############
Refactor ordering logic (1626 <https://github.com/django-import-export/django-import-export/pull/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 <https://github.com/django-import-export/django-import-export/pull/1638>_)
removed unused variable Result.new_record (1640 <https://github.com/django-import-export/django-import-export/pull/1640>_)
Refactor resources.py to standardise method args (1641 <https://github.com/django-import-export/django-import-export/pull/1641>_)
added specific check for missing import_id_fields (1645 <https://github.com/django-import-export/django-import-export/pull/1645>_)
Enable optional tablib dependencies (1647 <https://github.com/django-import-export/django-import-export/pull/1647>_)
added :meth:~import_export.widgets.ForeignKeyWidget.get_lookup_kwargs to make it easier to override object lookup (1651 <https://github.com/django-import-export/django-import-export/pull/1651>_)
Standardised interface of :meth:~import_export.widgets.Widget.render (1657 <https://github.com/django-import-export/django-import-export/pull/1657>_)
Fix declaring existing model field(s) in ModelResource altering export order (1663 <https://github.com/django-import-export/django-import-export/pull/1663>_)
Added :meth:~import_export.resources.Resource.do_instance_save helper method (1668 <https://github.com/django-import-export/django-import-export/pull/1668>_)
Enable defining Resource model as a string (1669 <https://github.com/django-import-export/django-import-export/pull/1669>_)
Support multiple Resources for export (1671 <https://github.com/django-import-export/django-import-export/pull/1671>_)
Support export from model change form (1687 <https://github.com/django-import-export/django-import-export/pull/1687>_)
Import form defaults to read-only field if only one format defined (1690 <https://github.com/django-import-export/django-import-export/pull/1690>_)
Updated Admin UI to track deleted and skipped Imports (1691 <https://github.com/django-import-export/django-import-export/pull/1691>_)
Added customizable MediaStorage (1708 <https://github.com/django-import-export/django-import-export/pull/1708>_)
Added customization of Admin UI import error messages (1727 <https://github.com/django-import-export/django-import-export/pull/1727>_)
Improve output of error messages (1729 <https://github.com/django-import-export/django-import-export/pull/1729>_)
Added feature: selectable fields for admin export view (1734 <https://github.com/django-import-export/django-import-export/pull/1734>_)
Added specific check for declared :attr:~import_export.options.ResourceOptions.import_id_fields not in dataset (1735 <https://github.com/django-import-export/django-import-export/pull/1735>_)
added try / catch to :meth:~import_export.results.RowResult.add_instance_info to handle unserializable instances (1767 <https://github.com/django-import-export/django-import-export/pull/1767>_)
Add form error if source file contains invalid header (1780 <https://github.com/django-import-export/django-import-export/pull/1780>_)
Remove unneeded format method overrides (1785 <https://github.com/django-import-export/django-import-export/pull/1785>_)
Support dynamic selection of Resource class based on request property (1787 <https://github.com/django-import-export/django-import-export/pull/1787>_)
Fixes
1485 <https://github.com/django-import-export/django-import-export/pull/1485>_)1633 <https://github.com/django-import-export/django-import-export/pull/1633>_)utils.original()log_action method (1673 <https://github.com/django-import-export/django-import-export/pull/1673>_)1696 <https://github.com/django-import-export/django-import-export/pull/1696>_)fields are still imported (1702 <https://github.com/django-import-export/django-import-export/pull/1702>_)~import_export.exceptions.FieldError during Admin import (1755 <https://github.com/django-import-export/django-import-export/pull/1755>_)FieldError during Admin export (1756 <https://github.com/django-import-export/django-import-export/pull/1756>_)~import_export.widgets.Widget.render (1757 <https://github.com/django-import-export/django-import-export/pull/1757>_)1762 <https://github.com/django-import-export/django-import-export/pull/1762>_)~import_export.widgets.SimpleArrayWidget.render crashes if value is None (1771 <https://github.com/django-import-export/django-import-export/pull/1771>_)get_import_resource_kwargs() (1789 <https://github.com/django-import-export/django-import-export/pull/1789>_)PositiveBigIntegerField (1795 <https://github.com/django-import-export/django-import-export/pull/1795>_)Development ###########
1630 <https://github.com/django-import-export/django-import-export/pull/1630>_)test_admin_integration(): split into smaller test modules (1662 <https://github.com/django-import-export/django-import-export/pull/1662>_)test_resources(): split into smaller test modules (1672 <https://github.com/django-import-export/django-import-export/pull/1672>_)docker-compose command with latest version syntax in runtests.sh (1686 <https://github.com/django-import-export/django-import-export/pull/1686>_)~import_export.resources into separate modules for declarative and options (1695 <https://github.com/django-import-export/django-import-export/pull/1695>_)1703 <https://github.com/django-import-export/django-import-export/pull/1703>_)1705 <https://github.com/django-import-export/django-import-export/pull/1705>_)test_resources.py into smaller modules (1733 <https://github.com/django-import-export/django-import-export/pull/1733>_)collect_failed_rows is True (1753 <https://github.com/django-import-export/django-import-export/pull/1753>_)1790 <https://github.com/django-import-export/django-import-export/pull/1790>_)1795 <https://github.com/django-import-export/django-import-export/pull/1795>_)Documentation #############
skip_diff documentation (1655 <https://github.com/django-import-export/django-import-export/pull/1655>_)1665 <https://github.com/django-import-export/django-import-export/pull/1665>_)1706 <https://github.com/django-import-export/django-import-export/pull/1706>_)1713 <https://github.com/django-import-export/django-import-export/pull/1713>_)1746 <https://github.com/django-import-export/django-import-export/pull/1746>_)Performance ###########
1717 <https://github.com/django-import-export/django-import-export/pull/1717>_)i18n
1775 <https://github.com/django-import-export/django-import-export/pull/1775>_)1797 <https://github.com/django-import-export/django-import-export/pull/1797>_)1776 <https://github.com/django-import-export/django-import-export/pull/1776>_)~import_export.mixins.BaseExportMixin.get_export_resource_kwargs to Resource constructor
:meth:~import_export.admin.ExportMixin.export_action (1739 <https://github.com/django-import-export/django-import-export/pull/1739>_)1745 <https://github.com/django-import-export/django-import-export/pull/1745>_)1743 <https://github.com/django-import-export/django-import-export/pull/1743>_)kwargs by default from :meth:~import_export.mixins.BaseImportExportMixin.get_resource_kwargs (1748 <https://github.com/django-import-export/django-import-export/pull/1748>_)1728 <https://github.com/django-import-export/django-import-export/pull/1728>_)1715 <https://github.com/django-import-export/django-import-export/pull/1715>_)1720 <https://github.com/django-import-export/django-import-export/pull/1720>_)1721 <https://github.com/django-import-export/django-import-export/pull/1721>_)1634 <https://github.com/django-import-export/django-import-export/pull/1634>_)1685 <https://github.com/django-import-export/django-import-export/pull/1685>_)CONTRIBUTING.md1698 <https://github.com/django-import-export/django-import-export/pull/1698>_)1701 <https://github.com/django-import-export/django-import-export/pull/1701>_)~import_export.admin.ExportActionMixin.export_admin_action can be overridden by subclassing it in the
ModelAdmin (1681 <https://github.com/django-import-export/django-import-export/pull/1681>_)1639 <https://github.com/django-import-export/django-import-export/pull/1639>_)1643 <https://github.com/django-import-export/django-import-export/pull/1643>_)~import_export.widgets.NumberWidget.render returns None as empty string
if coerce_to_string is True (1650 <https://github.com/django-import-export/django-import-export/pull/1650>_)1670 <https://github.com/django-import-export/django-import-export/pull/1670>_)1676 <https://github.com/django-import-export/django-import-export/pull/1676>_)1678 <https://github.com/django-import-export/django-import-export/pull/1678>_).readthedocs.yaml (1625 <https://github.com/django-import-export/django-import-export/pull/1625>_)Deprecations ############
Remove 'escape output' deprecation (1618 <https://github.com/django-import-export/django-import-export/pull/1618>_)
Removal of deprecated :ref:IMPORT_EXPORT_ESCAPE_OUTPUT_ON_EXPORT.
Deprecation of :ref:IMPORT_EXPORT_ESCAPE_HTML_ON_EXPORT. Refer to :ref:installation docs.
Enhancements ############
1579 <https://github.com/django-import-export/django-import-export/pull/1579>_)instance and original object in :class:~import_export.results.RowResult (1584 <https://github.com/django-import-export/django-import-export/pull/1584>_)1598 <https://github.com/django-import-export/django-import-export/pull/1598>_)1606 <https://github.com/django-import-export/django-import-export/pull/1606>_)1623 <https://github.com/django-import-export/django-import-export/pull/1623>_)Internationalization ####################
1588 <https://github.com/django-import-export/django-import-export/pull/1588>_)1604 <https://github.com/django-import-export/django-import-export/pull/1604>_)1622 <https://github.com/django-import-export/django-import-export/pull/1622>_)1618 <https://github.com/django-import-export/django-import-export/pull/1618>_)Fixes
1615 <https://github.com/django-import-export/django-import-export/pull/1615>_)1621 <https://github.com/django-import-export/django-import-export/pull/1621>_)Development ###########
1570 <https://github.com/django-import-export/django-import-export/pull/1570>_)1571 <https://github.com/django-import-export/django-import-export/pull/1571>_)1616 <https://github.com/django-import-export/django-import-export/pull/1616>_)1618 <https://github.com/django-import-export/django-import-export/pull/1618>_)Documentation #############
1614 <https://github.com/django-import-export/django-import-export/pull/1614>_)Escape formulae on export to XLSX (1568 <https://github.com/django-import-export/django-import-export/pull/1568>_)
This includes deprecation of :ref:IMPORT_EXPORT_ESCAPE_OUTPUT_ON_EXPORT.
Refer to :ref:installation for alternatives.
:meth: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 <https://github.com/django-import-export/django-import-export/pull/1566>_)
This includes deprecations to be aware of if you have overridden :meth:~import_export.resources.Resource.export
or :class:~import_export.forms.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 <https://github.com/django-import-export/django-import-export/pull/1564>_)
Added SECURITY.md (1563 <https://github.com/django-import-export/django-import-export/pull/1563>_)
Updated FAQ to include workaround for RelatedObjectDoesNotExist exception (1562 <https://github.com/django-import-export/django-import-export/pull/1562>_)
Prevent error comparing m2m field of the new objects (1560 <https://github.com/django-import-export/django-import-export/pull/1560>_)
Add documentation for passing data from admin form to Resource (1555 <https://github.com/django-import-export/django-import-export/pull/1555>_)
Added new translations to Spanish and Spanish (Argentina) (1552 <https://github.com/django-import-export/django-import-export/pull/1552>_)
Pass kwargs to import_set function (1448 <https://github.com/django-import-export/django-import-export/pull/1448>_)
Float and Decimal widgets use LANGUAGE_CODE on export (1501 <https://github.com/django-import-export/django-import-export/pull/1501>_)
Add optional dehydrate method param (1536 <https://github.com/django-import-export/django-import-export/pull/1536>_)
exceptions module has been undeprecatedUpdated DE translation (1537 <https://github.com/django-import-export/django-import-export/pull/1537>_)
Add option for single step import via Admin Site (1540 <https://github.com/django-import-export/django-import-export/pull/1540>_)
Add support for m2m add (1545 <https://github.com/django-import-export/django-import-export/pull/1545>_)
collect errors on bulk operations (1541 <https://github.com/django-import-export/django-import-export/pull/1541>_)
Improve bulk import performance (1539 <https://github.com/django-import-export/django-import-export/pull/1539>_)
raise_errors has been deprecated as a kwarg in import_row()Reduce memory footprint during import (1542 <https://github.com/django-import-export/django-import-export/pull/1542>_)
documentation updates (1533 <https://github.com/django-import-export/django-import-export/pull/1533>_)
add detailed format parameter docstrings to DateWidget and TimeWidget (1532 <https://github.com/django-import-export/django-import-export/pull/1532>_)
tox updates (1534 <https://github.com/django-import-export/django-import-export/pull/1534>_)
fix xss vulnerability in html export (1546 <https://github.com/django-import-export/django-import-export/pull/1546>_)
1508 <https://github.com/django-import-export/django-import-export/pull/1508>_)get_list_select_related in ExportMixin (1511 <https://github.com/django-import-export/django-import-export/pull/1511>_)change_list_template is a property (1523 <https://github.com/django-import-export/django-import-export/pull/1523>_)1526 <https://github.com/django-import-export/django-import-export/pull/1526>_)**kwargs param to Resource constructor (1527 <https://github.com/django-import-export/django-import-export/pull/1527>_)django-import-export-ci.yml to fix node.js deprecationDateTimeWidget.clean() handles tz aware datetime (1499 <https://github.com/django-import-export/django-import-export/pull/1499>_)1500 <https://github.com/django-import-export/django-import-export/pull/1500>_)Breaking changes ################
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.
Check value of ManyToManyField in skip_row() (1271 <https://github.com/django-import-export/django-import-export/pull/1271>_)
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.Bug fix: validation errors were being ignored when skip_unchanged is set (1378 <https://github.com/django-import-export/django-import-export/pull/1378>_)
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.Use 'create' flag instead of instance.pk (1362 <https://github.com/django-import-export/django-import-export/pull/1362>_)
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.widgets: Unused *args params have been removed from method definitions. (1413 <https://github.com/django-import-export/django-import-export/pull/1413>_)
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.Admin interface: Modified handling of import errors (1306 <https://github.com/django-import-export/django-import-export/pull/1306>_)
ImportForm: improve compatibility with previous signature (1434 <https://github.com/django-import-export/django-import-export/pull/1434>_)
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.Allow custom change_list_template in admin views using mixins (1483 <https://github.com/django-import-export/django-import-export/pull/1483>_)
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.1415 <https://github.com/django-import-export/django-import-export/pull/1415 >_)import.html: Added blocks to import template (1488 <https://github.com/django-import-export/django-import-export/pull/1488>_)
Deprecations ############
This release adds some deprecations which will be removed in a future release.
Add support for multiple resources in ModelAdmin. (1223 <https://github.com/django-import-export/django-import-export/pull/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 <https://github.com/django-import-export/django-import-export/pull/1372>_)
Refactored form-related methods on ImportMixin / ExportMixin (1147 <https://github.com/django-import-export/django-import-export/pull/1147>_)
The following are deprecated:
get_import_form()
get_confirm_import_form()
get_form_kwargs()
get_export_form()
Enhancements ############
1389 <https://github.com/django-import-export/django-import-export/pull/1389>_)RowResult (1393 <https://github.com/django-import-export/django-import-export/pull/1393>_)ForeignKeyWidget (1371 <https://github.com/django-import-export/django-import-export/pull/1371>_)CharWidget (1414 <https://github.com/django-import-export/django-import-export/pull/1414>_)change_list_template in admin views using mixins (1483 <https://github.com/django-import-export/django-import-export/pull/1483>_)1488 <https://github.com/django-import-export/django-import-export/pull/1488>_)1434 <https://github.com/django-import-export/django-import-export/pull/1434>_)ImportMixin / ExportMixin (1147 <https://github.com/django-import-export/django-import-export/pull/1147>_)1038 <https://github.com/django-import-export/django-import-export/pull/1038>_)1426 <https://github.com/django-import-export/django-import-export/pull/1426>_)Fixes
coverage combineCacheStorage (1417 <https://github.com/django-import-export/django-import-export/pull/1417>_)skip_row() handles M2M field when UUID pk used1418 <https://github.com/django-import-export/django-import-export/pull/1418>_)README.rstskip_row() fix crash when model has m2m field and none is provided in upload (1439 <https://github.com/django-import-export/django-import-export/pull/1439>_)1451 <https://github.com/django-import-export/django-import-export/pull/1451>_)Development ###########
1372 <https://github.com/django-import-export/django-import-export/pull/1372>_)Documentation #############
1306 <https://github.com/django-import-export/django-import-export/pull/1306>_)1451 <https://github.com/django-import-export/django-import-export/pull/1451>_)1469 <https://github.com/django-import-export/django-import-export/pull/1469>_)1478 <https://github.com/django-import-export/django-import-export/pull/1478>_)1460 <https://github.com/django-import-export/django-import-export/pull/1460>_)1318 <https://github.com/django-import-export/django-import-export/pull/1318>_)collect_failed_rows=True (1381 <https://github.com/django-import-export/django-import-export/pull/1381>_)1402 <https://github.com/django-import-export/django-import-export/pull/1402>_)1407 <https://github.com/django-import-export/django-import-export/pull/1407>_)1408 <https://github.com/django-import-export/django-import-export/pull/1408>_)1409 <https://github.com/django-import-export/django-import-export/pull/1409>_)django_extensions from example app settings (1356 <https://github.com/django-import-export/django-import-export/pull/1356>_)1357 <https://github.com/django-import-export/django-import-export/pull/1357>_)788 <https://github.com/django-import-export/django-import-export/pull/788>_)1299 <https://github.com/django-import-export/django-import-export/pull/1299>_)skip_html_diff meta attribute (1329 <https://github.com/django-import-export/django-import-export/pull/1329>_)1336 <https://github.com/django-import-export/django-import-export/pull/1336>_)1339 <https://github.com/django-import-export/django-import-export/pull/1339>_)1346 <https://github.com/django-import-export/django-import-export/pull/1346>_)1347 <https://github.com/django-import-export/django-import-export/pull/1347>_)1348 <https://github.com/django-import-export/django-import-export/pull/1348>_)1353 <https://github.com/django-import-export/django-import-export/pull/1353>_)1330 <https://github.com/django-import-export/django-import-export/pull/1330>_)1325 <https://github.com/django-import-export/django-import-export/pull/1325>_)1323 <https://github.com/django-import-export/django-import-export/pull/1323>_)1315 <https://github.com/django-import-export/django-import-export/pull/1315>_)1314 <https://github.com/django-import-export/django-import-export/pull/1314>_)1311 <https://github.com/django-import-export/django-import-export/pull/1311>_)1307 <https://github.com/django-import-export/django-import-export/pull/1307>_)1286 <https://github.com/django-import-export/django-import-export/pull/1286>_)1285 <https://github.com/django-import-export/django-import-export/pull/1285>_)1279 <https://github.com/django-import-export/django-import-export/pull/1279>_)1277 <https://github.com/django-import-export/django-import-export/pull/1277>_)1276 <https://github.com/django-import-export/django-import-export/pull/1276>_)1272 <https://github.com/django-import-export/django-import-export/pull/1272>_)1269 <https://github.com/django-import-export/django-import-export/pull/1269>_)1265 <https://github.com/django-import-export/django-import-export/pull/1265>_)1258 <https://github.com/django-import-export/django-import-export/pull/1258>_)1255 <https://github.com/django-import-export/django-import-export/pull/1255>_)1254 <https://github.com/django-import-export/django-import-export/pull/1254>_)1251 <https://github.com/django-import-export/django-import-export/pull/1251>_)1249 <https://github.com/django-import-export/django-import-export/pull/1249>_)1244 <https://github.com/django-import-export/django-import-export/pull/1244>_)1241 <https://github.com/django-import-export/django-import-export/pull/1241>_)1233 <https://github.com/django-import-export/django-import-export/pull/1233>_)1228 <https://github.com/django-import-export/django-import-export/pull/1228>_)1225 <https://github.com/django-import-export/django-import-export/pull/1225>_)1190 <https://github.com/django-import-export/django-import-export/pull/1190>_)1095 <https://github.com/django-import-export/django-import-export/pull/1095>_)IMPORT_EXPORT_CHUNK_SIZE to 100. (1196 <https://github.com/django-import-export/django-import-export/pull/1196>_)1218 <https://github.com/django-import-export/django-import-export/pull/1218>_)Signal(providing_args=...) usage.django.conf.urls.url() usage.1144 <https://github.com/django-import-export/django-import-export/pull/1144>_)1145 <https://github.com/django-import-export/django-import-export/pull/1145>_)1161 <https://github.com/django-import-export/django-import-export/pull/1161>_)1149 <https://github.com/django-import-export/django-import-export/pull/1149>_)True, False, and
None values. (1071 <https://github.com/django-import-export/django-import-export/pull/1071>_)1040 <https://github.com/django-import-export/django-import-export/pull/1040>_)1050 <https://github.com/django-import-export/django-import-export/pull/1050>_)Fix DurationWidget handling of zero value (1117 <https://github.com/django-import-export/django-import-export/pull/1117>_)
Make import diff view only show headers for user visible fields (1109 <https://github.com/django-import-export/django-import-export/pull/1109>_)
Make confirm_form accessible in get_import_resource_kwargs and get_import_data_kwargs (994 <https://github.com/django-import-export/django-import-export/pull/994>, 1108 <https://github.com/django-import-export/django-import-export/pull/1108>)
Initialize Decimal with text value, fix #1035 (1039 <https://github.com/django-import-export/django-import-export/pull/1039>_)
Adds meta flag 'skip_diff' to enable skipping of diff operations (1045 <https://github.com/django-import-export/django-import-export/pull/1045>_)
Update docs (1097 <https://github.com/django-import-export/django-import-export/pull/1097>, 1114 <https://github.com/django-import-export/django-import-export/pull/1114>, 1122 <https://github.com/django-import-export/django-import-export/pull/1122>, 969 <https://github.com/django-import-export/django-import-export/pull/969>, 1083 <https://github.com/django-import-export/django-import-export/pull/1083>, 1093 <https://github.com/django-import-export/django-import-export/pull/1093>)
Add support for tablib >= 1.0 (1061 <https://github.com/django-import-export/django-import-export/pull/1061>_)
Add ability to install a subset of tablib supported formats and save some automatic dependency installations (needs tablib >= 1.0)
Use column_name when checking row for fields (1056 <https://github.com/django-import-export/django-import-export/pull/1056>_)
Fix deprecated Django 3.0 function usage (1054 <https://github.com/django-import-export/django-import-export/pull/1054>_)
Pin tablib version to not use new major version (1063 <https://github.com/django-import-export/django-import-export/pull/1063>_)
Format field is always shown on Django 2.2 (1007 <https://github.com/django-import-export/django-import-export/pull/1007>_)
904 <https://github.com/django-import-export/django-import-export/pull/904>_)feat: Better surfacing of validation errors in UI / optional model instance validation (852 <https://github.com/django-import-export/django-import-export/pull/852>_)
chore: Use modern setuptools in setup.py (862 <https://github.com/django-import-export/django-import-export/pull/862>_)
chore: Update URLs to use https:// (863 <https://github.com/django-import-export/django-import-export/pull/863>_)
chore: remove outdated workarounds
chore: Run SQLite tests with in-memory database
fix: Change logging level (832 <https://github.com/django-import-export/django-import-export/pull/832>_)
fix: Changed get_instance() return val (842 <https://github.com/django-import-export/django-import-export/pull/842>_)
fix: Django2.1 ImportExportModelAdmin export (797 <https://github.com/django-import-export/django-import-export/pull/797>, 819 <https://github.com/django-import-export/django-import-export/pull/819>)
setup: add django2.1 to test matrix
JSONWidget for jsonb fields (803 <https://github.com/django-import-export/django-import-export/pull/803>_)
Add ExportActionMixin (809 <https://github.com/django-import-export/django-import-export/pull/809>_)
Add Import Export Permissioning #608 (804 <https://github.com/django-import-export/django-import-export/pull/804>_)
write_to_tmp_storage() for import_action() (781 <https://github.com/django-import-export/django-import-export/pull/781>_)
follow relationships on ForeignKeyWidget (798 <https://github.com/django-import-export/django-import-export/pull/798>_)
Update all pypi.python.org URLs to pypi.org
added test for tsv import
added unicode support for TSV for python 2
Added ExportViewMixin (692 <https://github.com/django-import-export/django-import-export/pull/692>_)
Make deep copy of fields from class attr to instance attr (550 <https://github.com/django-import-export/django-import-export/pull/550>_)
Fix #612: NumberWidget.is_empty() should strip the value if string type (613 <https://github.com/django-import-export/django-import-export/pull/613>_)
Fix #713: last day isn't included in results qs (779 <https://github.com/django-import-export/django-import-export/pull/779>_)
use Python3 compatible MySql driver in development (706 <https://github.com/django-import-export/django-import-export/pull/706>_)
fix: warning U mode is deprecated in python 3 (776 <https://github.com/django-import-export/django-import-export/pull/776>_)
refactor: easier overriding widgets and default field (769 <https://github.com/django-import-export/django-import-export/pull/769>_)
Updated documentation regarding declaring fields (735 <https://github.com/django-import-export/django-import-export/pull/735>_)
custom js for action form also handles grappelli (719 <https://github.com/django-import-export/django-import-export/pull/719>_)
Use 'verbose_name' in breadcrumbs to match Django default (732 <https://github.com/django-import-export/django-import-export/pull/732>_)
Add Resource.get_diff_class() (745 <https://github.com/django-import-export/django-import-export/pull/745>_)
Fix and add polish translation (747 <https://github.com/django-import-export/django-import-export/pull/747>_)
Restore raise_errors to before_import (749 <https://github.com/django-import-export/django-import-export/pull/749>_)
Switch to semver versioning (687 <https://github.com/django-import-export/django-import-export/pull/687>_)
Require Django>=1.8 (685 <https://github.com/django-import-export/django-import-export/pull/685>_)
upgrade tox configuration (737 <https://github.com/django-import-export/django-import-export/pull/737>_)
skip_row override example (702 <https://github.com/django-import-export/django-import-export/pull/702>_)
Testing against Django 2.0 should not fail (709 <https://github.com/django-import-export/django-import-export/pull/709>_)
Refactor transaction handling (690 <https://github.com/django-import-export/django-import-export/pull/690>_)
Resolves #703 fields shadowed (703 <https://github.com/django-import-export/django-import-export/pull/703>_)
discourage installation as a zipped egg (548 <https://github.com/django-import-export/django-import-export/pull/548>_)
Fixed middleware settings in test app for Django 2.x (696 <https://github.com/django-import-export/django-import-export/pull/696>_)
Refactors and optimizations (686 <https://github.com/django-import-export/django-import-export/pull/686>, 632 <https://github.com/django-import-export/django-import-export/pull/632>, 684 <https://github.com/django-import-export/django-import-export/pull/684>, 636 <https://github.com/django-import-export/django-import-export/pull/636>, 631 <https://github.com/django-import-export/django-import-export/pull/631>, 629 <https://github.com/django-import-export/django-import-export/pull/629>, 635 <https://github.com/django-import-export/django-import-export/pull/635>, 683 <https://github.com/django-import-export/django-import-export/pull/683>)
Travis tests for Django 2.0.x (691 <https://github.com/django-import-export/django-import-export/pull/691>_)
Refactor import_row call by using keyword arguments (585 <https://github.com/django-import-export/django-import-export/pull/585>_)
Added {{ block.super }} call in block bodyclass in admin/base_site.html (582 <https://github.com/django-import-export/django-import-export/pull/582>_)
Add support for the Django DurationField with DurationWidget (575 <https://github.com/django-import-export/django-import-export/pull/575>_)
GitHub bmihelac -> django-import-export Account Update (574 <https://github.com/django-import-export/django-import-export/pull/574>_)
Add intersphinx links to documentation (572 <https://github.com/django-import-export/django-import-export/pull/572>_)
Add Resource.get_import_fields() (569 <https://github.com/django-import-export/django-import-export/pull/569>_)
Fixed readme mistake (568 <https://github.com/django-import-export/django-import-export/pull/568>_)
Bugfix/fix m2m widget clean (515 <https://github.com/django-import-export/django-import-export/pull/515>_)
Allow injection of context data for template rendered by import_action() and export_action() (544 <https://github.com/django-import-export/django-import-export/pull/544>_)
Bugfix/fix exception in generate_log_entries() (543 <https://github.com/django-import-export/django-import-export/pull/543>_)
Process import dataset and result in separate methods (542 <https://github.com/django-import-export/django-import-export/pull/542>_)
Bugfix/fix error in converting exceptions to strings (526 <https://github.com/django-import-export/django-import-export/pull/526>_)
Fix admin integration tests for the new "Import finished..." message, update Czech translations to 100% coverage. (596 <https://github.com/django-import-export/django-import-export/pull/596>_)
Make import form type easier to override (604 <https://github.com/django-import-export/django-import-export/pull/604>_)
Add saves_null_values attribute to Field to control whether null values are saved on the object (611 <https://github.com/django-import-export/django-import-export/pull/611>_)
Add Bulgarian translations (656 <https://github.com/django-import-export/django-import-export/pull/656>_)
Add django 1.11 to TravisCI (621 <https://github.com/django-import-export/django-import-export/pull/621>_)
Make Signals code example format correctly in documentation (553 <https://github.com/django-import-export/django-import-export/pull/553>_)
Add Django as requirement to setup.py (634 <https://github.com/django-import-export/django-import-export/pull/634>_)
Update import of reverse for django 2.x (620 <https://github.com/django-import-export/django-import-export/pull/620>_)
Add Django-version classifiers to setup.py’s CLASSIFIERS (616 <https://github.com/django-import-export/django-import-export/pull/616>_)
Some fixes for Django 2.0 (672 <https://github.com/django-import-export/django-import-export/pull/672>_)
Strip whitespace when looking up ManyToMany fields (668 <https://github.com/django-import-export/django-import-export/pull/668>_)
Fix all ResourceWarnings during tests in Python 3.x (637 <https://github.com/django-import-export/django-import-export/pull/637>_)
Remove downloads count badge from README since shields.io no longer supports it for PyPi (677 <https://github.com/django-import-export/django-import-export/pull/677>_)
Add coveralls support and README badge (678 <https://github.com/django-import-export/django-import-export/pull/678>_)
French locale not in pypi (524 <https://github.com/django-import-export/django-import-export/pull/524>_)
Bugfix/fix undefined template variables (519 <https://github.com/django-import-export/django-import-export/pull/519>_)
Hide default value in diff when importing a new instance (458 <https://github.com/django-import-export/django-import-export/pull/458>_)
Append rows to Result object via function call to allow overriding (462 <https://github.com/django-import-export/django-import-export/pull/462>_)
Add get_resource_kwargs to allow passing request to resource (457 <https://github.com/django-import-export/django-import-export/pull/457>_)
Expose Django user to get_export_data() and export() (447 <https://github.com/django-import-export/django-import-export/pull/447>_)
Add before_export and after_export hooks (449 <https://github.com/django-import-export/django-import-export/pull/449>_)
fire events post_import, post_export events (440 <https://github.com/django-import-export/django-import-export/pull/440>_)
add **kwargs to export_data / create_dataset
Add before_import_row() and after_import_row() (452 <https://github.com/django-import-export/django-import-export/pull/452>_)
Add get_export_fields() to Resource to control what fields are exported (461 <https://github.com/django-import-export/django-import-export/pull/461>_)
Control user-visible fields (466 <https://github.com/django-import-export/django-import-export/pull/466>_)
Fix diff for models using ManyRelatedManager
Handle already cleaned objects (484 <https://github.com/django-import-export/django-import-export/pull/484>_)
Add after_import_instance hook (489 <https://github.com/django-import-export/django-import-export/pull/489>_)
Use optimized xlsx reader (482 <https://github.com/django-import-export/django-import-export/pull/482>_)
Adds resource_class of BookResource (re-adds) in admin docs (481 <https://github.com/django-import-export/django-import-export/pull/481>_)
Require POST method for process_import() (478 <https://github.com/django-import-export/django-import-export/pull/478>_)
Add SimpleArrayWidget to support use of django.contrib.postgres.fields.ArrayField (472 <https://github.com/django-import-export/django-import-export/pull/472>_)
Add new Diff class (477 <https://github.com/django-import-export/django-import-export/pull/477>_)
Fix #375: add row to widget.clean(), obj to widget.render() (479 <https://github.com/django-import-export/django-import-export/pull/479>_)
Restore transactions for data import (480 <https://github.com/django-import-export/django-import-export/pull/480>_)
Refactor the import-export templates (496 <https://github.com/django-import-export/django-import-export/pull/496>_)
Update doc links to the stable version, update rtfd to .io (507 <https://github.com/django-import-export/django-import-export/pull/507>_)
Fixed typo in the Czech translation (495 <https://github.com/django-import-export/django-import-export/pull/495>_)
Add FloatWidget, use with model fields models.FloatField (433 <https://github.com/django-import-export/django-import-export/pull/433>_)
Fix default values in fields (431 <https://github.com/django-import-export/django-import-export/pull/431>, 364 <https://github.com/django-import-export/django-import-export/pull/364>)
Field constructor default argument is NOT_PROVIDED instead of None
Field clean method checks value against Field.empty_values [None, '']
FIX: No static/ when installed via pip (427 <https://github.com/django-import-export/django-import-export/pull/427>_)
Add total # of imports and total # of updates to import success msg
fix MediaStorage does not respect the read_mode parameter (416 <https://github.com/django-import-export/django-import-export/pull/416>_)
Reset SQL sequences when new objects are imported (59 <https://github.com/django-import-export/django-import-export/pull/59>_)
Let Resource rollback if import throws exception (377 <https://github.com/django-import-export/django-import-export/pull/377>_)
Fixes error when a single value is stored in m2m relation field (177 <https://github.com/django-import-export/django-import-export/pull/177>_)
Add support for django.db.models.TimeField (381 <https://github.com/django-import-export/django-import-export/pull/381>_)
360 <https://github.com/django-import-export/django-import-export/pull/360>_)Add Django 1.9 support
Django 1.4 is not supported (348 <https://github.com/django-import-export/django-import-export/pull/348>_)
347 <https://github.com/django-import-export/django-import-export/pull/347>_)Allow Field.save() relation following (344 <https://github.com/django-import-export/django-import-export/pull/344>_)
Support default values on fields (and models) (345 <https://github.com/django-import-export/django-import-export/pull/345>_)
m2m widget: allow trailing comma (343 <https://github.com/django-import-export/django-import-export/pull/343>_)
Open csv files as text and not binary (127 <https://github.com/django-import-export/django-import-export/pull/127>_)
use the IntegerWidget for database-fields of type BigIntegerField (302 <https://github.com/django-import-export/django-import-export/pull/302>_)
make datetime timezone aware if USE_TZ is True (283 <https://github.com/django-import-export/django-import-export/pull/283>_).
Fix 0 is interpreted as None in number widgets (274 <https://github.com/django-import-export/django-import-export/pull/274>_)
add possibility to override tmp storage class (133 <https://github.com/django-import-export/django-import-export/pull/133>, 251 <https://github.com/django-import-export/django-import-export/pull/251>)
better error reporting (259 <https://github.com/django-import-export/django-import-export/pull/259>_)
Django 1.8 compatibility
add attribute inheritance to Resource (140 <https://github.com/django-import-export/django-import-export/pull/140>_)
make the filename and user available to import_data (237 <https://github.com/django-import-export/django-import-export/pull/237>_)
Add to_encoding functionality (244 <https://github.com/django-import-export/django-import-export/pull/244>_)
Call before_import before creating the instance_loader - fixes (193 <https://github.com/django-import-export/django-import-export/pull/193>_)
added use of get_diff_headers method into import.html template (158 <https://github.com/django-import-export/django-import-export/pull/158>_)
Try to use OrderedDict instead of SortedDict, which is deprecated in
Django 1.7 (157 <https://github.com/django-import-export/django-import-export/pull/157>_)
fixed #105 unicode import
remove invalid form action "form_url" (154 <https://github.com/django-import-export/django-import-export/pull/154>_)
Do not convert numeric types to string (149 <https://github.com/django-import-export/django-import-export/pull/149>_)
implement export as an admin action (124 <https://github.com/django-import-export/django-import-export/pull/124>_)
fix: get_value raised attribute error on model method call
Fixed XLS import on python 3. Optimized loop
Fixed properly skipping row marked as skipped when importing data from the admin interface.
Allow Resource.export to accept iterables as well as querysets
Improve error messages
FIX: Properly handle NullBoleanField (115 <https://github.com/django-import-export/django-import-export/pull/115>_) - Backward Incompatible Change
previously None values were handled as false
Add separator and field keyword arguments to ManyToManyWidget
FIX: No support for dates before 1900 (93 <https://github.com/django-import-export/django-import-export/pull/93>_)
RowResult now stores exception object rather than it's repr
Admin integration - add EntryLog object for each added/updated/deleted instance
65 <https://github.com/django-import-export/django-import-export/pull/65>_)61 <https://github.com/django-import-export/django-import-export/pull/61>_)Prevent queryset caching when exporting (44 <https://github.com/django-import-export/django-import-export/pull/44>_)
Allow unchanged rows to be skipped when importing (30 <https://github.com/django-import-export/django-import-export/pull/30>_)
Update tests for Django 1.6 (57 <https://github.com/django-import-export/django-import-export/pull/57>_)
Allow different ResourceClass to be used in ImportExportModelAdmin
(49 <https://github.com/django-import-export/django-import-export/pull/49>_)
Use field_name instead of column_name for field dehydration, FIX (36 <https://github.com/django-import-export/django-import-export/pull/36>_)
Handle OneToOneField, FIX (17 <https://github.com/django-import-export/django-import-export/pull/17>_) - Exception when attempting access something
on the related_name.
export filter not working (23 <https://github.com/django-import-export/django-import-export/pull/23>_)
Fix packaging
DB transactions support for importing data
support for deleting objects during import
bug fixes
Allowing a field to be 'dehydrated' with a custom method
added documentation
added ExportForm to admin integration for choosing export file format
refactor admin integration to allow better handling of specific formats supported features and better handling of reading text files
include all available formats in Admin integration
bugfixes