When you want to use a Translated Model in the Django admin, you have to subclass nani.admin.TranslatableAdmin instead of django.contrib.admin.ModelAdmin.

New methods



A method that can be used in list_display and shows a list of languages in which this object is available.

ModelAdmin APIs you should not change on TranslatableAdmin

Some public APIs on django.contrib.admin.ModelAdmin are crucial for nani.admin.TranslateablAdmin to work and should not be altered in subclasses. Only do so if you have a good understanding of what the API you want to change does.

The list of APIs you should not alter is:


If you wish to alter the template to be used to render your admin, use the implicit template fallback in the Django admin by creating a template named admin/<appname>/<modelname>/change_form.html or admin/<appname>/change_form.html. The template used in django-nani will automatically extend that template if it’s available.


Use nani.admin.TranslatableAdmin.form instead, but please see the notes regarding Forms in admin.


The only thing safe to alter in this method in subclasses is the context, but make sure you call this method on the superclass too. There’s three variable names in the context you should not alter:

  • title
  • language_tabs
  • base_template


Just don’t try to change this.


If you alter this method, make sure to call it on the superclass too to prevent duplicate objects to show up in the changelist or change views raising django.core.exceptions.MultipleObjectsReturned errors.

Forms in admin

If you want to alter the form to be used on your nani.admin.TranslatableAdmin subclass, it must inherit from nani.forms.TranslatableModelForm. For more informations, see Forms.

ModelAdmin APIs not available on TranslatableAdmin

A list of public APIs on django.contrib.admin.ModelAdmin which are not implemented on nani.admin.TranslatableAdmin.

  • list_display [1]
  • list_display_links [1]
  • list_filter [1]
  • list_select_related [1]
  • list_ediable [1]
  • search_fields [1]
  • date_hierarchy [1]
  • actions [1]


[1](1, 2, 3, 4, 5, 6, 7, 8) This API can only be used with Shared Fields.