# -*- coding: utf-8 -*- from settings.models import settings_dict, Setting from django.conf import settings from functions.translate import get_translated_fields def fill_missing_languages(obj): """ looking for missing languages and fill translated fields with first available language uses in post_save signal """ # what languages must be all_langs = [code for code, lang in settings.LANGUAGES] # what languages are obj_langs = obj.get_available_languages() missing_languages = list(set(all_langs) - set(obj_langs)) # get first Translation object translation = obj.translations.all()[0] fields = get_translated_fields(obj) for code in missing_languages: # translate obj.translate(code) # go through all fields and set value for field in fields: setattr(obj, field, getattr(translation, field)) obj.save() def fill_meta_information(obj): """ looking for available settings for this object and fill empty field with settings rules """ # return list of settings for this object s_list = settings_dict.get(obj.__class__.__name__) if s_list: for s in s_list: # get Setting model object setting = Setting.objects.get(key=s.get('key')) field = s.get('field_name') if setting.type != 'transl': # simple field if getattr(obj, field)=="": setattr(obj, field, setting.get_value()) obj.save() else: # translated field for code, lang in settings.LANGUAGES: # get translation object tr = obj._meta.translations_model.objects.get(language_code=code, master__id=getattr(obj, 'id')) if getattr(tr, field)=="": value = setting.get_value(code) try: value = value%tr.__dict__ except KeyError: pass # ! charfield -> textfield setattr(tr, field, value[:250]) tr.save()