# -*- coding: utf-8 -*- from django.db import models from hvad.models import TranslatableModel, TranslatedFields from functions.custom_fields import EnumField class Setting(TranslatableModel): """ Create Settings model, which stores different settings of project Uses hvad.TranslatableModel which is child of django.db.models class Setting create only by admin """ VALUES = ('int', 'text', 'transl', 'date') key = models.CharField(max_length=50) type = EnumField(values=VALUES) int = models.IntegerField(blank=True, null=True) text = models.CharField(max_length=255, blank=True) date = models.DateTimeField(blank=True, null=True) translations = TranslatedFields( transl = models.CharField(max_length=255, blank=True,default='111'), name = models.CharField(max_length=50), ) def __unicode__(self): return self.key def get_value(self, code=None): """ returns value of setting value can be - int, text, date or translated field """ if self.type == 'transl': obj = Setting._meta.translations_model.objects.get(language_code = code,master__id=getattr(self, 'id')) return getattr(obj, self.type) else: return getattr(self,self.type) def set_value(self, value, code=None): """ sets value of setting """ if self.type == 'transl': obj = Setting._meta.translations_model.objects.get(language_code = code,master__id=getattr(self, 'id')) setattr(obj, self.type, value) obj.save() else: setattr(self, self.type, value) # dictionaty of models settings # every model have list of settings # key: setting in db, field_name: field in model settings_dict = dict(#City=[{'key': 'city_title', 'field_name': 'title', 'type': 'transl', 'verbose_name': 'title Городов'}, # {'key': 'city_keywords', 'field_name': 'keywords', 'type': 'transl', 'verbose_name': 'keywords'}, # {'key': 'city_descriptions', 'field_name': 'descriptions', 'type': 'transl', 'verbose_name': 'description'}], #Exposition=[{'key': 'exposition_title', 'field_name': 'title', 'type': 'transl', 'verbose_name': 'title Выставок'}, # {'key': 'exposition_keywords', 'field_name': 'keywords', 'type': 'transl', 'verbose_name': 'keywords Выставок'}], # Country=[{'key': 'country_title', 'field_name': 'title', 'type': 'transl', 'verbose_name': 'title'}, # {'key': 'country_keywords', 'field_name': 'keywords', 'type': 'transl', 'verbose_name': 'keywords'}, # {'key': 'country_descriptions', 'field_name': 'descriptions', 'type': 'transl', 'verbose_name': 'description'}] # Exposition=[{'key': 'exposition_title', 'field_name': 'title', 'type': 'transl', 'verbose_name': 'Exposition title'}, # {'key': 'exposition_keywords', 'field_name': 'keywords', 'type': 'transl', 'verbose_name': 'Exposition keywords'}, # {'key': 'exposition_descriptions', 'field_name': 'descriptions', 'type': 'transl', 'verbose_name': 'Exposition description'}] ) #from settings.models import settings, Setting #country_set = settings.get('country') #for s in country_set: # set = Setting(key=s['key'], type=s['type']) # set.save() from django.db.models.signals import post_save from django.dispatch import receiver #@receiver(post_save, sender=Setting) def create_transl_fields(sender, **kw): """ """ setting = kw['instance'] setting.text = '111' setting.save() #if kwargs['created'] and setting.type == 'transl': # setting.int = 1 #if len(setting.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 #post_save.connect(create_transl_fields, sender=Setting)