- Added Django 2.1 and 2.2 support
- Added translation support to data migrations.
- Fixed formatting of initial form values for translated fields.
- Fixed admin change view redirects to preserve
?language=..
in the query string. - Fixed admin loading
prepopulate.js
for DEBUG=True. - Fixed admin quoting for
object_id
URLs. - Fixed
UUIDField
support. - Fixed object creation when setting the
pk
field on newly added objects. - Fixed check on
MISSING
sentinel when loading cached models. - Fixed
QuerySet._clone()
argument signature. - Fixed
model.delete()
call to return collector data. - Fixed
model.refresh_from_db()
to clear the translations cache too. - Fixed returning full full
ValidationError
data fromvalidate_unique()
. - Drop Django 1.7, 1.8, 1.9, 1.10 compatibility.
- Fixed Django 2.0
contribute_to_class()
call signature. - Fixed "Save and add another" button redirect when using different admin sites.
- Fixed import location of
mark_safe()
.
- Fixed HTML output in Django 2.0 for the the
language_column
andall_languages_column
fields in the Django admin.
- Added Django 2.0 support.
- Fixed
get_or_create()
call when no defaults are given.
- Fixed checkes for missing fallback languages (
IsMissing
sentinel value leaked through caching) - Fixed preserving the language tab in the admin.
- Fixed
get_or_create()
call.
- Dropped Django 1.5, 1.6 and Python 2.6 support.
- Fixed Django 1.10 / 1.11 support:
- Fix
.language('xx').get()
usage. - Fix models construction via
Model(**kwargs)
. - Fix test warnings due to tests corrupting the app registry.
- Fix
- Fix support for
ModelFormMixin.fields
inTranslatableUpdateView
. Django allows that attribute as alternative to setting aform_class
manually.
- Added
delete_translation()
API. - Added
PARLER_DEFAULT_ACTIVATE
setting, which allows to display translated texts in the default language even throughtranslation.activate()
is not called yet. - Improve language code validation in forms, allows to enter a language variant.
- Fixed not creating translations when default values were filled in.
- Fixed breadcrumb errors in delete translation view when using django-polymorphic-tree.
- Fix
get_translated_url()
when Django uses bytestrings forQUERY_STRING
. - Raise
ValidError
when aTranslatableForm
is initialized with a language code that is not available inLANGUAGES
.
Backwards compatibility note: An ValueError
is now raised when forms are initialized
with an invalid languae code. If your project relied on invalid language settings, make sure
that LANGAUGE_CODE
and LANGUAGES
are properly configured.
Rationale: Since the security fix in v1.6.3 (to call the clean()
method of translated fields),
invalid language codes are no longer accepted. The choice was either to passively warn and exclude
the language from validation checks, or to raise an error beforehand that the form is used
to initialize bad data. It's considered more important to avoid polluted database contents
then preserving compatibility, hence this check remains as strict.
- Fix calling
clean()
on fields that are not part of the form. - Fix tab appearance for Django 1.9 and flat theme.
- Fix issues with
__proxy__
field for template names - Fix attempting to save invalid
None
language when Django translations are not yet initialized.
Note: django-parler models now mandate that a language code is selected; either by calling
model.set_current_language()
, Model.objects.language()
or activating a gettext environment.
The latter always happens in a standard web request, but needs to happen explicitly in management commands.
This avoids hard to debug situations where unwanted model changes happen on implicitly selected languages.
- Security notice: Fixed calling
clean()
on the translations model. - Fixed error with M2M relations to the translated model.
- Fixed
UnicodeError
inparler_tags
- Show warning when translations are not initialized (when using management commands).
- Added
TranslatableModelMixin
to handle complex model inheritance issues. - Fixed tuple/list issues with
fallbacks
option. - Fixed Python 3 __str__()` output for
TranslatedFieldsModel
. - Fixed output for
get_language_title()
when language is not configured. - Fixed preserving GET args in admin change form view.
- Fix queryset
.dates()
iteration in newer Django versions. - Fixed Django 1.10 deprecation warnings in the admin.
- Avoided absolute URLs in language tabs.
- Added Django 1.9 support
- Added support to generate
PARLER_LANGUAGES
from Django CMS'CMS_LANGUAGES
. - Improve language variant support, e.g.
fr-ca
can fallback tofr
, andde-ch
can fallback tode
. - Dropped support for Django 1.4
(also released as 1.6b1 on 2015-12-16)
- Fix handling for non-nullable
ForeignKey
in forms and admin. - Fix performance of the admin list when
all_languages_column
orlanguage_column
is added tolist_display
(N-query issue). - Fix support for other packages that replace the BoundField class in
Form.__get_item__
(namely django-slug-preview). - Fix editing languages that exist in the database but are not enabled in project settings.
- Fix DeprecationWarning for Django 1.8 in the admin.
- Added support for multiple fallback languages!
- Added
translatable-field
CSS class to the<label>
tags of translatable fields. - Added
{{ field.is_translatable }}
variable. - Added warning when saving a model without language code set.
As of Django 1.8,
get_language()
returnsNone
if no language is activated. - Allow
safe_translation_getter(default=..)
to be a callable. - Added
all_languages_column
, inspired by aldryn-translation-tools. - Changed styling of
language_column
, the items are now links to the language tabs. - Fix caching support, the default timeout was wrongly imported.
- Fix Django 1.4 support for using
request.resolver_match
. - Fix admin delete translation view when using
prefetch_related('translations')
by default in the managersget_queryset()
method. - Fix using prefetched translations in
has_translation()
too. - Return to change view after deleting a translation.
- Added Django 1.8 support
- Fix caching when using redis-cache
- Fix handling
update_fields
insave()
(needed for combining parler with django-mptt 0.7) - Fix unwanted migration changes in Django 1.6/South for the internal
HideChoicesCharField
. - Fix overriding get_current_language() / get_form_language() in the
TranslatableModelFormMixin
/TranslatableCreateView
/TranslatableUpdateView
.
- Added support for
MyModel.objects.language(..).create(..)
. - Detect when translatable fields are assigned too early.
- Fix adding
choices=LANGUAGES
to all Django 1.7 migrations. - Fix missing 404 check in delete-translation view.
- Fix caching for models that have a string value as primary key.
- Fix support for a primary-key value of
0
. - Fix
get_form_class()
override check forTranslatableModelFormMixin
for Python 3. - Fix calling manager methods on related objects in Django 1.4/1.5.
- Improve
{% get_translated_url %}
, usingrequest.resolver_match
value. - Fix preserving query-string in
{% get_translated_url %}
, unless an object is explicitly passed. - Fix supporting removed model fields in
get_cached_translation()
.
- Fixed fetching correct translations when using
prefetch_related()
.
- Added support for translations on multiple model inheritance levels.
- Added
TranslatableAdmin.get_translation_objects()
API. - Added
TranslatableModel.create_translation()
API. - Added
TranslatableModel.get_translation()
API. - Added
TranslatableModel.get_available_languages(include_unsaved=True)
API. - NOTE: the
TranslationDoesNotExist
exception inherits fromObjectDoesNotExist
now. Check your exception handlers when upgrading.
- Fix accessing fields using
safe_translation_getter(any_language=True)
- Fix "dictionary changed size during iteration" in
save_translations()
in Python 3. - Added
default_permissions=()
for translated models in Django 1.7.
- Added Django 1.7 compatibility.
- Added
SortedRelatedFieldListFilter
for displaying translated models in thelist_filter
. - Added
parler.widgets
withSortedSelect
and friends. - Fix caching translations in Django 1.6.
- Fix checking
unique_together
on the translated model. - Fix access to
TranslatableModelForm._current_language
in early__init__()
code. - Fix
PARLER_LANGUAGES['default']['fallback']
being overwritten byPARLER_DEFAULT_LANGUAGE_CODE
. - Optimized prefetch usage, improves loading of translated models.
- BACKWARDS INCOMPATIBLE: The arguments of
get_cached_translated_field()
have changed ordering,field_name
comes beforelanguage_code
now.
- Added
TranslatableSlugMixin
, to be used for detail views. - Fixed translated field names in admin
list_display
, addedshort_description
toTranslatedFieldDescriptor
- Fix internal server errors in
{% get_translated_url %}
for function-based views with class kwargs - Improved admin layout for
save_on_top=True
.
- Fixed missing app_label in cache key, fixes support for multiple models with the same name.
- Fixed "dictionary changed size during iteration" in
save_translations()
- Added
get_translated_url
template tag, to implement language switching easily. This also allows to implement hreflang support for search engines. - Added a
ViewUrlMixin
so views can tell the template what their exact canonical URL should be. - Added
TranslatableCreateView
andTranslatableUpdateView
views, and associated mixins. - Fix missing "language" GET parmeter for Django 1.6 when filtering in the admin (due to the
_changelist_filters
parameter). - Support missing SITE_ID setting for Django 1.6.
- BACKWARDS INCOMPATIBLE: updated the model name of the dynamically generated translation models for django-hvad compatibility.
This only affects your South migrations. Use
manage.py schemamigration appname --empty "upgrade_to_django_parler10"
to upgrade applications which usetranslations = TranslatedFields(..)
in their models. - Added Python 3 compatibility!
- Added support for
.prefetch('translations')
. - Added automatic caching of translated objects, use
PARLER_ENABLE_CACHING = False
to disable. - Added inline tabs support (if the parent object is not translatable).
- Allow
.translated()
and.active_translations()
to filter on translated fields too. - Added
language_code
parameter tosafe_translation_getter()
, to fetch a single field in a different language. - Added
switch_language()
context manager. - Added
get_fallback_language()
to result ofadd_default_language_settings()
function. - Added partial support for tabs on inlines when the parent object isn't a translated model.
- Make settings.SITE_ID setting optional
- Fix inefficient or unneeded queries, i.e. for new objects.
- Fix supporting different database (using=) arguments.
- Fix list language, always show translated values.
- Fix
is_supported_django_language()
to support dashes too - Fix ignored
Meta.fields
declaration on forms to exclude all other fields.
- Added support for inlines!
- Fix error in Django 1.4 with "Save and continue" button on add view.
- Fix error in
save_translations()
when objects fetched fallback languages. - Add
save_translation(translation)
method, to easily hook into thetranslation.save()
call. - Added support for empty
translations = TranslatedFields()
declaration.
- Support using
TranslatedFieldsModel
with abstract models. - Added
parler.appsettings.add_default_language_settings()
function. - Added
TranslatableManager.queryset_class
attribute to easily customize the queryset class. - Added
TranslatableManager.translated()
method to filter models with a specific translation. - Added
TranslatableManager.active_translations()
method to filter models which should be displayed. - Added
TranslatableAdmin.get_form_language()
to access the currently active language. - Added
hide_untranslated
option to thePARLER_LANGUAGES
setting. - Added support for
ModelAdmin.formfield_overrides
.
- Added
TranslatedField(any_language=True)
option, which uses any language as fallback in case the currently active language is not available. This is ideally suited for object titles. - Improved
TranslationDoesNotExist
exception, now inherits fromAttributeError
. This missing translations fail silently in templates (e.g. admin list template).. - Added unittests
- Fixed Django 1.4 compatibility
- Fixed saving all translations, not only the active one.
- Fix sending
pre_translation_save
signal. - Fix passing
_current_language
to the model __init__ function.
- Added signals to detect translation model init/save/delete operations.
- Added default
TranslatedFieldsModel
verbose_name
, to improve the delete view. - Allow using the
TranslatableAdmin
for non-TranslatableModel
objects (operate as NO-OP).
- First version, based on intermediate work in django-fluent-pages. Integrating django-hvad turned out to be very complex, hence this app was developped instead.