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.
93 lines
3.3 KiB
93 lines
3.3 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'}],
|
|
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'}]
|
|
)
|
|
|
|
#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) |