# -*- coding: utf-8 -*- from django import forms from models import Setting from django.conf import settings from functions.translate import fill_trans_fields, populate, ZERO_LANGUAGE, populate_all, fill_trans_fields_all class SettingsForm(forms.Form): """ Create Settings form for creating settings __init__ uses for dynamic creates fields save function saves data in Settings object. If it doesnt exist create new object """ def __init__(self, *args, **kwargs): super(SettingsForm, self).__init__(*args, **kwargs) # creates translated form fields, example: name_ru, name_en # len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs settings_list = Setting.objects.all() for item in settings_list: if item.type != 'transl': self.fields['%s'%item.key] = forms.CharField(label='%s'%item.key, initial=item.get_value(), required=False) else: if len(settings.LANGUAGES) in range(10): for lid, (code, name) in enumerate(settings.LANGUAGES): # using enumerate for detect iteration number # first iteration is a default lang so it required fields required = True if lid == 0 else False self.fields['%s_%s' %(item.key, code)] = forms.CharField(label=getattr(item, 'key'), initial=item.get_value(code), required=required,widget=forms.TextInput(attrs={'style':'width: 450px'})) def save(self): """ changes Settings model """ data = self.cleaned_data capacity_tmpl = Setting.objects.get(key='hall_template') for code, name in settings.LANGUAGES: capacity_tmpl.set_value(data['hall_capacity_tmpl_%s'%code], code)