You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

98 lines
4.1 KiB

# -*- 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)