Мне нужно управлять записями на разных языках, с контентом, редактируемым онлайн зарегистрированными пользователями, без использования инструмента администрирования Django.
Формы должны быть локализованы на каждом языке.
Поскольку количество языков фиксировано, я решил обрабатывать разные языки с разными полями в модели, с именем поля, дополненным кодом языка, см. пример ниже.
# models.py
class MyAttribute(models.Model):
name_en = models.CharField() # name in English
name_es = models.CharField() # name in Spanish
name_fr = models.CharField() # name in French
field2_en = models.CharField() # field2 in English
field2_es = models.CharField() # field2 in Spanish
field2_fr = models.CharField() # field2 in French
class MyGroup(models.Model):
name_en = models.CharField() # name in English
name_es = models.CharField() # name in Spanish
name_fr = models.CharField() # name in French
myattribute = models.ForeignKey(MyAttribute)
Я уже создал собственный тег для отображения локализованного контента в моих шаблонах, и он работает хорошо.
{% localized_value mygroup name current_language %}
Теперь мне нужно настроить форму для редактирования объектов MyGroup с полем models.ModelChoiceField для поля myattribute. Насколько я понимаю, по умолчанию всегда будет отображаться одна и та же строка, сгенерированная label_from_instance() в модели, и нет возможности использовать там request.LANGUAGE_CODE.
Итак, мой вопрос: как динамически выбирать правильное поле name_language_code для отображения в моей форме?
Реализация может быть примерно такой:
# views.py
form.fields["myattribute"].related_field = eval('name_' + language_code)
or
# template.html
{{ form.myattribute language_code }}
Есть идеи?
Кстати, используя Django 1.6