Forms¶
TranslationModelForm
is an adaptation of Django’s django.forms.ModelForm
that allows management of translation fields.
Assuming your model is translated with modeltrans,
you can use TranslationModelForm
to specify which languages to include form fields for.
For example, given a NewsRoom
model:
class NewsRoom(models.Model):
name = models.CharField(max_length=255)
text = models.CharField(max_length=255)
default_language = models.CharField(max_length=2)
i18n = TranslationField(fields=("name", "text"), fallback_language_field="default_language")
You can define a form using TranslationModelForm
as:
from modeltrans.forms import TranslationModelForm
class NewsRoomTranslationForm(TranslationModelForm):
class Meta:
fields = ("name", "text")
languages = ["browser", "fr", "fallback"]
fallback_language = "en"
This defines a form with at most three language inputs per field, say "nl"
, "fr"
and "en"
,
where "nl"
is the active browser language, and "en"
the defined fallback language.
Meta.exclude
can also be used to define which fields are in the form,
where the forms’ field_order
parameter can be used to define the field ordering.
Setting the form languages¶
languages
defines the languages included in the form.- Options are:
"browser"
: the language that is active in the browser session"fallback"
: the fallback language either defined in the form, the model instance, or in the system, in that order of priority- a language code: e.g.
"fr"
,"it"
- Default:
["browser", "fallback"]
- Ordering: the ordering defined in the declaration is preserved
- Duplicate languages are removed, e.g.
["browser", "fr", "fallback"]
, becomes["fr"]
if browser language and fallback are also"fr"
.
languages
can be defined in the form Meta
options as in the example above, or as a form kwarg as in:
form = NewsRoomTranslationForm(languages=["it", "fallback"])
Setting the fallback language¶
fallback_language
defines the fallback language in the form.
Requires "fallback"
to be included in languages
.
Can be defined via the form Meta
options as in the example above, and also be passed as a kwarg like languages
.
The following prioritization is followed:
fallback_language
passed as form parameter:Form(fallback_language="fr")
- the
Meta
optionfallback_language
:- e.g.
class Meta: fallback_language = "fr"
- A custom fallback of a model instance set via
fallback_language_field
:- e.g.
i18n = TranslationField(fields=("title", "header"), fallback_language_field="language_code")
- The default language of the system: If no
Meta
option is given fallback reverts toget_default_language()
Handling of field properties¶
Properties of translation form fields are inherited from the form field that is generated for the original model field. The label of the field is adjusted to include the relevant language and to designate the field as a translation or default fallback field, as follows:
- translation fields: “field name (NL, translation language)”
- fallback field: “field name (EN, default language)”