8. Release Notes

8.1. 0.6.0 - upcoming release

Note

This version is being developed. If you feel like helping, or want the very latest feature, you can install it from the github repository. Otherwise, please get a packaged release instead.

Python and Django versions supported:

  • Django 1.3 is no longer supported.
  • Python 2.6 is no longer supported. Though it is likely to work for the time being, it has been dropped from the tested setups.

New features:

  • TranslationQueryset now has a fallbacks() method when running on Django 1.6 or newer, allowing the queryset to use fallback languages while retaining all its normal functionalities – #184.

Fixes:

  • Ecountering a regular (un-translatable) model in a deep select_related does not break anymore. — #206.
  • Language tabs URI are now correctly generated when changelist filters are used. — #203.
  • Admin language tab selection is no longer lost when change filters are active. — #202.

8.2. 0.5.0 - current release

Released on September 11, 2014

Python and Django versions supported:

  • This version will be the last to support Django 1.3.
  • This version will be the last to support Python 2.6. Though it may still work for the time being, it will be removed from the tested setups.

New features:

  • New translationformset_factory and its companion BaseTranslationFormSet allow building a formset to work on an instance’s translations. Please have at look at its detailed documentation#157.
  • Method language() now accepts the special value 'all', allowing the query to consider all translations – #181.
  • Django 1.6+’s new datetimes() method is now available on TranslationQueryset too – #175.
  • Django 1.6+’s new earliest() method is now available on TranslationQueryset.
  • Calls to language(), passing None to use the current language now defers language resolution until the query is evaluated. It can now be used in form definitions directly, for instance for passing a custom queryset to ModelChoiceField#171.
  • Similarly, use_fallbacks() can now be passed None as one of the fallbacks, and it will be replaced with current language at query evaluation time.
  • All queryset classes used by TranslationManager can now be customized thanks to the new fallback_class and default_class attributes.
  • Abstract models are now supported. The concrete class must still declare a TranslatedFields instance, but it can be empty – #180.
  • Django-hvad messages are now available in Italian – #178.
  • The Meta.ordering model setting is now supported on translatable models. It accepts both translated and shared fields – #185, #12.
  • The select_related() method is no longer limited to 1 level depth – #192.
  • The select_related() method semantics is now consistent with that of regular querysets. It supports passing None to clear the list and mutiple calls mimic Django behavior. That is: cumulative starting from Django 1.7 and substitutive before – #192.

Deprecation list:

  • The deprecated nani module was removed.
  • Method using_translations() is now deprecated. It can be safely replaced by language() with no arguments.
  • Setting NANI_TABLE_NAME_SEPARATOR was renamed to HVAD_TABLE_NAME_SEPARATOR. Using the old name will still work for now, but issue a deprecation warning, and get removed in next version.
  • CSS class nani-language-tabs in admin templates was renamed to hvad-language-tabs. Entities will bear both classes until next version.
  • Private _real_manager and _fallback_manager attributes of TranslationQueryset have been removed as the indirection served no real purpose.
  • The TranslationFallbackManager is deprecated and will be removed in next release. Please use manager’s untranslated() method instead.
  • The TranslatableModelBase metaclass is no longer necessary and will be removed in next release. hvad no longer triggers metaclass conflicts and TranslatableModelBase can be safely dropped – #188.
  • Overriding the language in QuerySet.get() and QuerySet.filter() is now deprecated. Either use the language() method to set the correct language, or specify language('all') to filter manually through get and filter#182.

Fixes:

  • Method latest() now works when passed no field name, properly getting the field name from the model’s Meta.get_latest_by option.
  • FallbackQueryset now leverages the better control on queries allowed in Django 1.6 and newer to use only one query to resolve fallbacks. Old behavior can be forced by adding HVAD_LEGACY_FALLBACKS = True to your settings.
  • Assigning value to translatable foreign keys through its _id field no longer results in assigned value being ignored – #193.
  • Tests were refactored to fully support PostgreSQL – #194

8.3. 0.4.1

Released on June 1, 2014

Fixes:

8.4. 0.4.0

Released on May 19, 2014

New Python and Django versions supported:

  • django-hvad now supports Django 1.7 running on Python 2.7, 3.3 and 3.4.
  • django-hvad now supports Django 1.6 running on Python 2.7 and 3.3.

New features:

  • TranslationManager‘s queryset class can now be overriden by setting its queryset_class attribute.
  • Proxy models can be used with django-hvad. This is a new feature, please use with caution and report any issue on github.
  • TranslatableAdmin‘s list display now has direct links to each available translation.
  • Instance’s translated fields are now available to the model’s save() method when saving a TranslatableModelForm.
  • Accessing a translated field on an untranslated instance will now raise an AttributeError with a helpful message instead of letting the exception bubble up from the ORM.
  • Method in_bulk() is now available on TranslationQueryset.

Deprecation list:

  • Catching ObjectDoesNotExist when accessing a translated field on an instance is deprecated. In case no translation is loaded and none exists in database for current language, an AttributeError is raised instead. For the transition, both are supported until next release.

Removal of the old 'nani' aliases was postponed until next release.

Fixes:

  • Fixed an issue where TranslatableAdmin could overwrite the wrong language while saving a form.
  • lazy_translation_getter() now tries translations in LANGUAGES order once it has failed with current language and site’s main LANGUAGE_CODE.
  • No more deprecation warnings when importing only from hvad.
  • TranslatableAdmin now generates relative URLs instead of absolute ones, enabling it to work behind reverse proxies.
  • django-hvad does not depend on the default manager being named ‘objects’ anymore.
  • Q objects now work properly with TranslationQueryset.

8.5. 0.3

New Python and Django versions supported:

  • django-hvad now supports Django 1.5 running on Python 2.6 and 2.6.

Deprecation list:

  • Dropped support for django 1.2.
  • In next release, the old ‘nani’ module will be removed.

8.6. 0.2

The package is now called ‘hvad’. Old imports should result in an import error.

Fixed django 1.4 support

Fixed a number of minor issues

8.7. 0.1.4 (Alpha)

Released on November 29, 2011

8.8. 0.1.3 (Alpha)

Released on November 8, 2011

  • A new setting was introduced to configure the table name separator, NANI_TABLE_NAME_SEPARATOR.

    Note

    If you upgrade from an earlier version, you’ll have to rename your tables yourself (the general template is appname_modelname_translation) or set NANI_TABLE_NAME_SEPARATOR to the empty string in your settings (which was the implicit default until 0.1.0)

8.9. 0.0.4 (Alpha)

8.10. 0.0.3 (Alpha)

Released on May 26, 2011.

  • Replaced our ghetto fallback querying code with a simplified version of the logic used in Bert Constantins django-polymorphic, all credit for our now better FallbackQueryset code goes to him.
  • Replaced all JSON fixtures for testing with Python fixtures, to keep tests maintainable.
  • Nicer language tabs in admin thanks to the amazing help of Angelo Dini.
  • Ability to delete translations from the admin.
  • Changed hvad.admin.TranslatableAdmin.get_language_tabs signature.
  • Removed tests from egg.
  • Fixed some tests possibly leaking client state information.
  • Fixed a critical bug in hvad.forms.TranslatableModelForm where attempting to save a translated model with a relation (FK) would cause IntegrityErrors when it’s a new instance.
  • Fixed a critical bug in hvad.models.TranslatableModelBase where certain field types on models would break the metaclass. (Many thanks to Kristian Oellegaard for the fix)
  • Fixed a bug that prevented abstract TranslatableModel subclasses with no translated fields.

8.11. 0.0.2 (Alpha)

Released on May 16, 2011.

  • Removed language code field from admin.
  • Fixed admin ‘forgetting’ selected language when editing an instance in another language than the UI language in admin.

8.12. 0.0.1 (Alpha)

Released on May 13, 2011.

  • First release, for testing purposes only.