Translations without fallback languages

When a translation is missing, the fallback languages are used. However, when an object has no fallback languages, this still fails.

There are a few solutions to this problem:

  1. Declare the translated attribute explicitly with any_language=True:

    from parler.models import TranslatableModel
    from parler.fields import TranslatedField
    class MyModel(TranslatableModel):
        title = TranslatedField(any_language=True)

    Now, the title will try to fetch one of the existing languages from the database.

  2. Use safe_translation_getter() on attributes which don’t have an any_language=True setting. For example:

    model.safe_translation_getter("fieldname", any_language=True)
  3. Catch the TranslationDoesNotExist exception. For example:

        return object.title
    except TranslationDoesNotExist:
        return ''

    Because this exception inherits from AttributeError, templates already display empty values by default.

  4. Avoid fetching untranslated objects using queryset methods. For example:


    Which is almost identical to:

    codes = get_active_language_choices()

    Note that the same ORM restrictions apply here.