Трябва да управлявам записи на различни езици със съдържание, редактирано онлайн от регистрирани потребители, без да използвам инструмента за администриране на 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