parent
954178c4b1
commit
1946a04da4
16 changed files with 304 additions and 66 deletions
@ -0,0 +1,17 @@ |
||||
# -*- coding: utf-8 -*- |
||||
from django.shortcuts import render_to_response |
||||
from django.http import HttpResponseRedirect, HttpResponse |
||||
from django.core.context_processors import csrf |
||||
from django.conf import settings |
||||
from django.contrib.auth.decorators import login_required |
||||
# |
||||
from forms import SettingsForm |
||||
|
||||
|
||||
|
||||
@login_required |
||||
def change_settings(request): |
||||
form = SettingsForm() |
||||
args = {'form': form, 'languages': settings.LANGUAGES} |
||||
args.update(csrf(request)) |
||||
return render_to_response('settings.html', args) |
||||
@ -0,0 +1,43 @@ |
||||
# -*- 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) |
||||
@ -0,0 +1,81 @@ |
||||
# -*- coding: utf-8 -*- |
||||
from django.db import models |
||||
from hvad.models import TranslatableModel, TranslatedFields |
||||
from django.conf import settings |
||||
|
||||
# |
||||
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 |
||||
""" |
||||
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) |
||||
|
||||
|
||||
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) |
||||
@ -0,0 +1,16 @@ |
||||
""" |
||||
This file demonstrates writing tests using the unittest module. These will pass |
||||
when you run "manage.py test". |
||||
|
||||
Replace this with more appropriate tests for your application. |
||||
""" |
||||
|
||||
from django.test import TestCase |
||||
|
||||
|
||||
class SimpleTest(TestCase): |
||||
def test_basic_addition(self): |
||||
""" |
||||
Tests that 1 + 1 always equals 2. |
||||
""" |
||||
self.assertEqual(1 + 1, 2) |
||||
@ -0,0 +1,6 @@ |
||||
# -*- coding: utf-8 -*- |
||||
from django.conf.urls import patterns, include, url |
||||
|
||||
urlpatterns = patterns('settings.admin', |
||||
url(r'^$', 'change_settings'), |
||||
) |
||||
@ -0,0 +1 @@ |
||||
# Create your views here. |
||||
@ -0,0 +1,17 @@ |
||||
{% extends 'base.html' %} |
||||
|
||||
|
||||
{% block body %} |
||||
|
||||
<form method="post" class="form-horizontal" enctype="multipart/form-data" name="form1" id="form1"> {% csrf_token %} |
||||
|
||||
{% for field in form %} |
||||
{{ field.name }} |
||||
{% with field='{{ field.int }}' form=form languages=languages %} |
||||
{% include 'admin/forms/multilang.html' %} |
||||
{% endwith %} |
||||
|
||||
{% endfor %} |
||||
|
||||
</form> |
||||
{% endblock %} |
||||
@ -0,0 +1,9 @@ |
||||
{% extends 'base.html' %} |
||||
|
||||
{% block body %} |
||||
|
||||
<form> |
||||
{{ form }} |
||||
|
||||
</form> |
||||
{% endblock %} |
||||
Loading…
Reference in new issue