Release Notes


Fixes compatibity with django 1.7. Use setuptools instead of distutils.


Fixes Exception in standin_for(): a new-style class can’t have only classic bases.


Fixed Django 1.5 template requirements for admin media.


Fixes I18n for models with tuple permissions. Allow custom admin class for register_all. fixes wrong import in easymode.tree.admin.forms.


This release fixes most incompatibilities of easymode with django 1.4. Most importantly, it fixes i18n. This release is therefor meant to be used with django 1.4.


Easymode is now moving towards the 1.0 release. I took the liberty of removing code whose usefulness was dubious and also refactor mercilessly. You will also find some very nice new features in this release!

That being said, you can not simply update and run an existing application on this release!

Backward incompatible changes:

  • The names of localized table columns are constructed differently now. Upgrading means migrating all your column names!
  • Easypublisher was removed, because it was too hard to maintain.
  • All xml related code moved to the package easmode.tree.xml.
  • DiocoreCharField, DiocoreHTMLField, DiocoreTextField, CSSField, IncludeFileField, RemoteIncludeField where removed.

New features:

Bugs fixed:

  • Fields marked for translation with I18n can now be sorted on in the admin when they are included in list_display.

  • Order_by now works on translated fields with 5 letter locales:

    from django.utils.languagecode import get_real_fieldname
    # this now works:
    MyModel.objects.order_by(get_real_fieldname('somefield', 'en-us'))


Models decorated with I18n nolonger have problems deleting related models in cascade mode.


Easymode nolonger installs any packages automatically during installation, these should now be installed by hand.


Using super in an admin class decorated with L10n, will nolonger result in infinite recursion.


Fixes SafeHTMLField‘s buttons property, which can be used to override the tinymce buttons per field.


ForeignKeyAwareModelAdmin now properly handles parent_link that points to a model in a different app.


Added nofollow option to mark foreign keys that shouldn’t be followed by the serializer. Nofollow can be used to optimize easymodes queries when generating xml, see Exclude certain relations from being followed by the serializer.


  • Fallbacks for translatable fields now also work when the first fallback is not the MSGID_LANGUAGE.


  • You can now override the model form of an admin class decorated with L10n, just like normal admin classes.


  • Easymode nolonger patches SubFieldBase. Fields that throw Exceptions when their descriptor is accessed can now also be internationalized using I18n. This includes ImageField and FileField.


  • standin_for() now returns a standin that can be pickled and unpickled.


  • register_all will nolonger try to register abstract models
  • search_fields is now supported for ModelAdmin classes that use L10n, however it will not let you access related items.
  • You can now use fieldsets with the Can edit untranslated fields permission.
  • Added support for creating new objects to easypublisher.
  • Added tools to build preview functionality for drafts.
  • Added filter that removes unpublished items from the xml.
  • fixed error ‘cannot import name introspection’ caused by a circular import.


  • Added option to exclude models from register_all
  • Backwards incompatible change: easymode nolonger has any bindings for django-cms.
  • Easymode will now show you the origin of a value, by displaying symbols next to the input field in the admin:
    1. If a value is from the gettext catalog or fallback, easymode will display ∴°
    2. If a value is from the database, but the catalog has a different value, easymode will display ∴⁺ . You can hover over this symbol to see the catalog value.
    3. If a value is from the database and there is no conflict with the catalog, easymode will display only
  • Fixed bug where a value that evaluated to None was set with the string None instead of types.NoneType None
  • fixes bug where get_localized_property would crash if settings did not have FALLBACK_LANGUAGES defined.
  • django.db.models.ManyToManyField and django.db.models.ForeignKey are now handled by the default xslt (‘xslt/model-to-xml.xsl’).


  • fixes easymode.admin.abstract.AbstractOrderedModel
  • register_all will ignore models that are django.contrib.admin.sites.AlreadyRegistered, but still register other models in the module.


  • Fixed bug in recursion_depth context manager and added tests.


  • Modified the xslt parser to use the file path instead of a string, so you can use xsl:include now.
  • libxsltmod is nolonger a supported xslt engine
  • Added util to add register all models in some module in one go.


  • Easymode will nolonger complain about rosetta, polib and tinymce when none of the features that require these packages are used.
  • Moved polib util to easymode.utils.polibext to avoid name clashes
  • DiocoreTextField now accepts cols and rows as parameters.
  • The mechanism to add extra attributes to the xml produced by the serializer is now more generic. If a field has the ‘extra_attrs’ property, these attributes will be added as attributes to the field xml.
  • Updated the serializer to support natural keys:
  • Now easymode can automatically serialize many to many fields. The recursion is guarded, and will let you know when you made a cyclic relation in you model tree. (see RECURSION_LIMIT).
  • mutex now raises SemaphoreException instead of doing sys.exit().
  • When to_python returns a weird object on a field instead of a string, it is now converted to unicode before it is used as a msgid.


  • DiocoreHTMLField will now also show a tinymce editor when it is not internationalized.

  • When there is a problem with monkey patching django.db.models.SubfieldBase easymode will throw an exception. (Monkey patch fixes

  • New field aded, CSSField, which allows specification of css classes for a rich text field, the css classes will appear in the xml as:



  • Django 1.2 is required for easymode as of v0.6.0.
  • get_real_fieldname() now returns a string instead of unicode. This way a dict can be constructed using it’s results as keys, and the dict can be turned into keyword arguments of filter when doing a query in a specific language.
  • Small improvements in error handling when AUTO_CATALOG is True


  • Added easymode.admin.models.fields.SafeTextField, a textfield which strips all cariage returns before saving, which is required when using Automatic catalog management.
  • Updated django requirement to v1.1.2 because python 2.6.5 will otherwise make the unit tests fail.


  • The example app now has a working fixture.


  • Special admin widgets are nolonger discarded by easymode (issue #3)


  • Some data files where not installed correctly by