This log shows interesting changes that happen for each version, latest versions first. It can be assumed that translations have been updated each release, and any new translations added.
- Nothing changed yet.
- Nothing changed yet.
- Fix a TypeError when no country is selected, introduced in the Django 5 fix.
- Replace deprecated
pkg_resources.iter_entry_points
withimportlib_metadata
. - Support Django 5.0.
- Make
CountryField
queryset filters also work with country codes in addition to names. - Switch to
pyproject.toml
rather thansetup.py
to fix installation issues with pip 23.0+.
- Rename Turkey to Türkiye.
- A change in v7.4 introduced multi-choice countries being stored sorted and
deduplicated. This remains the default behaviour going forwards, but these
can now be overridden via arguments on the
CountryField
. - Improve translation fallback handling, fixing a threading race condition that could cause odd translation issues. Thanks to Jan Wróblewski and Antoine Fontaine for their help in resolving this. This also fixes translation issues with older Python 3.6/3.7 versions.
- Add Python 3.11, drop Python 3.6 and Django 2.2 support.
- Fix error when using
USE_I18N = False
.
- Fix broken translations due to last common country names fix.
- Fixed Traditional Chinese translation (needed to be
locale/zh_Hant
). - Update flag of Honduras.
- Add Django 4.0 and 4.1 to the test matrix, dropping 3.0 and 3.1
- Add Django Rest Framework 3.13 and 3.14, dropping 3.11.
- Multi-choice countries are now stored sorted and with duplicates stripped. Thanks flbraun and Jens Diemer!
- Fix common country names not being honoured in non-English translations (only fixed for Python 3.8+).
- Fix slowdown introduced in v7.3 caused by always using country name lookups
for field comparisons.
filter(country="New Zealand")
will no longer match now, but instead new__name
and__iname
filters have been added to achieve this.
- Typing compatibility fixes for Python <3.9.
- Make full English country names work in database lookups, for example,
Person.objects.filter(country__icontains="zealand")
.
- Fix Latin translations.
- Allow the character field to work with custom country codes that are not 2 characters (such as "GB-WLS").
- Fix compatibility with
django-migrations-ignore-attrs
library.
- Allow customising the
str_attr
of Country objects returned from a CountryField via a newcountries_str_attr
keyword argument (thanks C. Quentin). - Add
pyuca
as an extra dependency, so that it can be installed likepip install django-countries[pyuca]
. - Add Django 3.2 support.
- Add
name_only
as an option to the Django Rest Framework serializer field (thanks Miguel Marques). - Add in Python typing.
- Add Python 3.9, Django 3.1, and Django Rest Framework 3.12 support.
- Drop Python 3.5 support.
- Improve IOC code functionality, allowing them to be overridden in
COUNTRIES_OVERRIDE
using the complex dictionary format.
- Update flag of Mauritania.
- Add flag for Kosovo (under its temporary code of XK).
- Fix Python 3.5 syntax error (no f-strings just yet...).
- Change ISO country import so that "Falkland Islands [Malvinas]" => "Falkland Islands (Malvinas)".
- Add a GraphQL object type for a django
Country
object.
- Make DRF CountryField respect
blank=False
. This is a backwards incompatible change since blank input will now return a validation error (unlessblank
is explicitly set toTrue
). - Fix
COUNTRIES_OVERRIDE
when using the complex dictionary format and a single name. - Add bandit to the test suite for basic security analysis.
- Drop Python 2.7 and Python 3.4 support.
- Add Rest Framework 3.10 and 3.11 to the test matrix, remove 3.8.
- Fix a memory leak when using PyUCA. Thanks Meiyer (aka interDist)!
- Django 3.0 compatibility.
- Plugin system for extending the
Country
object.
- Renamed Macedonia -> North Macedonia.
- Fix an outlying
makemigrations
error. - Pulled in new translations which were provided but missing from previous version.
- Fixed Simplified Chinese translation (needed to be
locale/zh_Hans
). - Introduce an optional complex format for
COUNTRIES_ONLY
andCOUNTRIES_OVERRIDE
to allow for multiple names for a country, a custom three character code, and a custom numeric country code.
- Add test coverage for Django Rest Framework 3.9.
- Tests for Django 2.1 and Django Rest Framework 3.8.
- Fix
dumpdata
andloaddata
forCountryField(multiple=True)
.
- Iterating a
Countries
object now returns named tuples. This makes things nicer when using{% get_countries %}
or using the country list elsewhere in your code.
- Ensure Django 2.1 compatibility for
CountrySelectWidget
. - Fix regression introduced into 5.1 when using Django 1.8 and certain queryset
lookup types (like
__in
).
- Fix some translations that were included in 5.1 but not compiled.
- Tests now also cover Django Rest Framework 3.7 and Django 2.0.
- Allow for creating country fields using (valid) alpha-3 or numeric codes.
- Fix migration error with blank default (thanks Jens Diemer).
- Add a
{% get_countries %}
template tag (thanks Matija Čvrk).
- No longer allow
multiple=True
andnull=True
together. This causes problems saving the field, andnull
shouldn't really be used anyway because the country field is a subclass ofCharField
.
- Add a
CountryFieldMixin
Django Rest Framework serializer mixin that automatically picks the right field type for aCountryField
(both single and multi-choice). - Validation for Django Rest Framework field (thanks Simon Meers).
- Allow case-insensitive
.by_name()
matching (thanks again, Simon). - Ensure a multiple-choice
CountryField.max_length
is enough to hold all countries. - Fix inefficient pickling of countries (thanks Craig de Stigter for the report and tests).
- Stop adding a blank choice when dealing with a multi-choice
CountryField
. - Tests now cover multiple Django Rest Framework versions (back to 3.3).
- Fix invalid reStructuredText in CHANGES.
- Use transparency layer for flag sprites.
- Change rest framework field to be based on
ChoiceField
. - Allow for the rest framework field to deserialize by full country name (specifically the English name for now).
- Fix for broken CountryField on certain models in Django 1.11. Thanks aktiur for the test case.
- Update tests to cover Django 1.11
- Handle "Czechia" translations in a nicer way (fall back to "Czech Republic" until new translations are available).
- Fix for an import error in Django 1.9+ due to use of non-lazy
ugettext
in the django-countries custom admin filter. - Back to 100% test coverage.
- Add sprite flag files (and
Country.flag_css
property) to help minimize HTTP requests.
- Better default Django admin filter when filtering a country field in a
ModelAdmin
. - Fix settings to support Django 1.11
- Fix when using a model instance with a deferred country field.
- Allow
CountryField
to handle multiple countries at once! - Allow CountryField to still work if Deferred.
- Fix a field with customized country list. Thanks pilmie!
Django supported versions are now 1.8+
- Drop legacy code
- Fix tests, 100% coverage
- IOS / OSX unicode flags function
- Fix widget choices on Django 1.9+
- Add
COUNTRIES_FIRST_SORT
. Thanks Edraak!
- Fix tests for
COUNTRIES_FIRST_SORT
(feature still worked, tests didn't).
- Extend test suite to cover Django 1.8
- Fix XSS escaping issue in CountrySelectWidget
- Common name changes: fix typo of Moldova, add United Kingdom
- Add
{% get_country %}
template tag. - New
CountryField
Django Rest Framework serializer field.
- Fix minor packaging error.
- Add the attributes to
Countries
class that can override the default settings. - CountriesField can now be passed a custom countries subclass to use, which combined with the previous change allows for different country choices for different fields.
- Allow
COUNTRIES_ONLY
to also accept just country codes in its list (rather than only two-tuples), looking up the translatable country name from the full country list. - Fix Montenegro flag size (was 12px high rather than the standard 11px).
- Fix outdated ISO country name formatting for Bolivia, Gambia, Holy See, Iran, Micronesia, and Venezuela.
- Fixes initial iteration failing for a fresh
Countries
object. - Fix widget's flag URLs (and use ensure widget is HTML encoded safely).
- Add
countries.by_name(country, language='en')
method, allowing lookup of a country code by its full country name. Thanks Josh Schneier.
- Start change log :)
- Add a
COUNTRIES_FIRST
setting (and some other related ones) to allow for specific countries to be shown before the entire alphanumeric list. - Add a
blank_label
argument toCountryField
to allow customization of the label shown in the initial blank choice shown in the select widget.
- Packaging fix (
CHANGES.rst
wasn't in the manifest)
Django supported versions are now 1.4 (LTS) and 1.6+
- Add
COUNTRIES_ONLY
setting to restrict to a specific list of countries. - Optimize country name translations to avoid exessive translation calls that were causing a notable performance impact.
- PyUCA integration, allowing for more accurate sorting across all locales. Also, a better sorting method when PyUCA isn't installed.
- Better tests (now at 100% test coverage).
- Add a
COUNTRIES_FLAG_URL
setting to allow custom flag urls. - Support both IOC and numeric country codes, allowing more flexible lookup of countries and specific code types.
- Field descriptor now returns
None
if no country matches (reverted in v3.0.1)
- Revert descriptor to always return a Country object.
- Fix the
CountryField
widget choices appearing empty due to a translation change in v3.0.
- Fix
CountrySelectWidget
failing when used with a model form that is passed a model instance.
- Add IOC (3 letter) country codes.
- Fix bug when loading fixtures.
- Fix issue with translations getting evaluated early.
- Fix Python 3 compatibility.
This is the first entry to the change log. The previous was 1.5, released 19 Nov 2012.
- Optimized flag images, adding flags missing from original source.
- Better storage of settings and country list.
- New country list format for fields.
- Better tests.
- Changed
COUNTRIES_FLAG_STATIC
setting toCOUNTRIES_FLAG_URL
.