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