parent
a60c4ba173
commit
e05624c4a7
31 changed files with 291 additions and 588 deletions
@ -1,68 +0,0 @@ |
|||||||
{% extends 'base.html' %} |
|
||||||
{% load static %} |
|
||||||
|
|
||||||
{% block scripts %} |
|
||||||
{% endblock %} |
|
||||||
|
|
||||||
{% block body%} |
|
||||||
<form method="post" class="form-horizontal" enctype="multipart/form-data"> {% csrf_token %} |
|
||||||
<fieldset> |
|
||||||
<legend><i class="icon-edit"></i>Создать администратора</legend> |
|
||||||
|
|
||||||
<div class="box span8"> |
|
||||||
<div class="box-header well"> |
|
||||||
<h2><i class="icon-pencil"></i> </h2> |
|
||||||
</div> |
|
||||||
<div class="box-content"> |
|
||||||
{# email #} |
|
||||||
<div class="control-group {% if form.email.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.email.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.email }} |
|
||||||
<span class="help-inline">{{ form.email.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# password1 #} |
|
||||||
<div class="control-group {% if form.password1.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.password1.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.password1 }} |
|
||||||
<span class="help-inline">{{ form.password1.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# password2 #} |
|
||||||
<div class="control-group {% if form.password2.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.password2.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.password2 }} |
|
||||||
<span class="help-inline">{{ form.password2.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# first_name #} |
|
||||||
<div class="control-group {% if form.first_name.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.first_name.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.first_name }} |
|
||||||
<span class="help-inline">{{ form.first_name.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# last_name #} |
|
||||||
<div class="control-group {% if form.last_name.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.last_name.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.last_name }} |
|
||||||
<span class="help-inline">{{ form.last_name.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="controls"> |
|
||||||
<input class="btn btn-large btn-primary" type="submit" value="Добавить"> |
|
||||||
<input class="btn btn-large" type="reset" value="Отмена"> |
|
||||||
</div> |
|
||||||
|
|
||||||
</fieldset> |
|
||||||
</form> |
|
||||||
|
|
||||||
{% endblock %} |
|
||||||
@ -1,75 +0,0 @@ |
|||||||
{% extends 'base.html' %} |
|
||||||
|
|
||||||
|
|
||||||
{% block body %} |
|
||||||
<form method="post" class="form-horizontal" enctype="multipart/form-data"> {% csrf_token %} |
|
||||||
<fieldset> |
|
||||||
<legend><i class="icon-edit"></i>Изменить переводчика</legend> |
|
||||||
|
|
||||||
<div class="box span8"> |
|
||||||
<div class="box-header well"> |
|
||||||
<h2><i class="icon-pencil"></i>Информация</h2> |
|
||||||
</div> |
|
||||||
<div class="box-content"> |
|
||||||
{# education #} |
|
||||||
<div class="control-group {% if form.education.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.education.label }}:</label> |
|
||||||
<div class="controls">{{ form.education }} |
|
||||||
<span class="help-inline">{{ form.education.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# specialization #} |
|
||||||
<div class="control-group {% if form.specialization.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.specialization.label }}:</label> |
|
||||||
<div class="controls">{{ form.specialization }} |
|
||||||
<span class="help-inline">{{ form.specialization.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# languages #} |
|
||||||
<div class="control-group {% if form.languages.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.languages.label }}:</label> |
|
||||||
<div class="controls">{{ form.languages }} |
|
||||||
<span class="help-inline">{{ form.languages.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# native_language #} |
|
||||||
<div class="control-group {% if form.native_language.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.native_language.label }}:</label> |
|
||||||
<div class="controls">{{ form.native_language }} |
|
||||||
<span class="help-inline">{{ form.native_language.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# car #} |
|
||||||
<div class="control-group {% if form.car.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.car.label }}:</label> |
|
||||||
<div class="controls">{{ form.car }} |
|
||||||
<span class="help-inline">{{ form.car.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# prices #} |
|
||||||
<div class="control-group {% if form.prices.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.prices.label }}:</label> |
|
||||||
<div class="controls">{{ form.prices }} |
|
||||||
<span class="help-inline">{{ form.prices.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# discounts #} |
|
||||||
<div class="control-group {% if form.discounts.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.discounts.label }}:</label> |
|
||||||
<div class="controls">{{ form.discounts }} |
|
||||||
<span class="help-inline">{{ form.discounts.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="controls"> |
|
||||||
<input class="btn btn-large btn-primary" type="submit" value="Добавить"> |
|
||||||
<input class="btn btn-large" type="reset" value="Отмена"> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
</fieldset> |
|
||||||
</form> |
|
||||||
|
|
||||||
{% endblock %} |
|
||||||
@ -1,60 +0,0 @@ |
|||||||
{% extends 'base.html' %} |
|
||||||
|
|
||||||
{% block body %} |
|
||||||
<div class="box span8"> |
|
||||||
<div class="box-header well"> |
|
||||||
<h2><i class="icon-arrow-down"></i>Список переводчиков</h2> |
|
||||||
</div> |
|
||||||
<div class="box-content"> |
|
||||||
<table class="table table-hover"> |
|
||||||
<thead> |
|
||||||
<tr> |
|
||||||
<th>id</th> |
|
||||||
<th>Email</th> |
|
||||||
<th>Полное имя</th> |
|
||||||
<th>Переводчик</th> |
|
||||||
<th> </th> |
|
||||||
</tr> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
{% for item in objects %} |
|
||||||
|
|
||||||
<tr> |
|
||||||
<td>{{ item.id }}</td> |
|
||||||
<td>{{ item.email }}</td> |
|
||||||
<td>{{ item.get_full_name }}</td> |
|
||||||
|
|
||||||
{% if item.is_translator %} |
|
||||||
<td>Да</td> |
|
||||||
{% else %} |
|
||||||
<td> </td> |
|
||||||
{% endif %} |
|
||||||
<td class="center sorting_1"> |
|
||||||
<a class="btn btn-info" href="/accounts/translators/{{ item.id }}"> |
|
||||||
<i class="icon-edit icon-white"></i> Изменить |
|
||||||
</a> |
|
||||||
</td> |
|
||||||
</tr> |
|
||||||
|
|
||||||
{% endfor %} |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
|
|
||||||
</div> |
|
||||||
{# pagination #} |
|
||||||
<div class="pagination pagination-centered"> |
|
||||||
<ul> |
|
||||||
{% if objects.has_previous %} |
|
||||||
<li> <a href="?page={{ objects.previous_page_number }}">←</a></li> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if objects.has_next %} |
|
||||||
<li><a href="?page={{ objects.next_page_number }}">→</a></li> |
|
||||||
{% endif %} |
|
||||||
</ul> |
|
||||||
</div> |
|
||||||
|
|
||||||
</div> |
|
||||||
|
|
||||||
|
|
||||||
{% endblock %} |
|
||||||
@ -1,68 +0,0 @@ |
|||||||
{% extends 'base.html' %} |
|
||||||
{% load static %} |
|
||||||
|
|
||||||
{% block body %} |
|
||||||
|
|
||||||
<div class="box span8"> |
|
||||||
<div class="box-header well"> |
|
||||||
<h2><i class="icon-arrow-down"></i>Список пользователей</h2> |
|
||||||
</div> |
|
||||||
<div class="box-content"> |
|
||||||
<table class="table table-hover"> |
|
||||||
<thead> |
|
||||||
<tr> |
|
||||||
<th>id</th> |
|
||||||
<th>Email</th> |
|
||||||
<th>Полное имя</th> |
|
||||||
<th>Админ</th> |
|
||||||
<th>Переводчик</th> |
|
||||||
<th> </th> |
|
||||||
</tr> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
{% for item in objects %} |
|
||||||
|
|
||||||
<tr> |
|
||||||
<td>{{ item.id }}</td> |
|
||||||
<td>{{ item.email }}</td> |
|
||||||
<td>{{ item.get_full_name }}</td> |
|
||||||
{% if item.is_admin %} |
|
||||||
<td>Да</td> |
|
||||||
{% else %} |
|
||||||
<td> </td> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if item.is_translator %} |
|
||||||
<td>Да</td> |
|
||||||
{% else %} |
|
||||||
<td> </td> |
|
||||||
{% endif %} |
|
||||||
<td class="center sorting_1"> |
|
||||||
<a class="btn btn-info" href="/accounts/change/{{ item.id }}"> |
|
||||||
<i class="icon-edit icon-white"></i> Изменить |
|
||||||
</a> |
|
||||||
</td> |
|
||||||
</tr> |
|
||||||
|
|
||||||
{% endfor %} |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
|
|
||||||
</div> |
|
||||||
{# pagination #} |
|
||||||
<div class="pagination pagination-centered"> |
|
||||||
<ul> |
|
||||||
{% if objects.has_previous %} |
|
||||||
<li> <a href="?page={{ objects.previous_page_number }}">←</a></li> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if objects.has_next %} |
|
||||||
<li><a href="?page={{ objects.next_page_number }}">→</a></li> |
|
||||||
{% endif %} |
|
||||||
</ul> |
|
||||||
</div> |
|
||||||
|
|
||||||
</div> |
|
||||||
|
|
||||||
|
|
||||||
{% endblock %} |
|
||||||
@ -1,220 +0,0 @@ |
|||||||
{% extends 'base.html' %} |
|
||||||
{% load static %} |
|
||||||
|
|
||||||
{% block scripts %} |
|
||||||
|
|
||||||
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script> |
|
||||||
{# selects #} |
|
||||||
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/> |
|
||||||
<script src="{% static 'js/select/select2.js' %}"></script> |
|
||||||
<script src="{% static 'custom_js/make_select.js' %}"></script> |
|
||||||
|
|
||||||
<script> |
|
||||||
$(document).ready(function(){ |
|
||||||
$('#rst_pswd').click(function(){ |
|
||||||
$.get( |
|
||||||
"/accounts/reset_password_email/", {'email': $('#id_email').val()}, function(j){ |
|
||||||
alert(j); |
|
||||||
}); |
|
||||||
return false; |
|
||||||
}) |
|
||||||
}) |
|
||||||
|
|
||||||
</script> |
|
||||||
|
|
||||||
|
|
||||||
{% endblock %} |
|
||||||
|
|
||||||
{% block body %} |
|
||||||
<form method="post" class="form-horizontal" enctype="multipart/form-data"> {% csrf_token %} |
|
||||||
<fieldset> |
|
||||||
<legend><i class="icon-edit"></i>Изменить пользователя</legend> |
|
||||||
|
|
||||||
<div class="box span8"> |
|
||||||
<div class="box-header well"> |
|
||||||
<h2><i class="icon-pencil"></i> Основная информация</h2> |
|
||||||
</div> |
|
||||||
<div class="box-content"> |
|
||||||
{{ form.user_id }} |
|
||||||
{# email #} |
|
||||||
<div class="control-group {% if form.email.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.email.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.email }} |
|
||||||
<span class="help-inline">{{ form.email.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# first_name #} |
|
||||||
<div class="control-group {% if form.first_name.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.first_name.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.first_name }} |
|
||||||
<span class="help-inline">{{ form.first_name.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# last_name #} |
|
||||||
<div class="control-group {% if form.last_name.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.last_name.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.last_name }} |
|
||||||
<span class="help-inline">{{ form.last_name.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# url #} |
|
||||||
<div class="control-group {% if form.url.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.url.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.url }} |
|
||||||
<span class="help-inline">{{ form.url.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# country #} |
|
||||||
<div class="control-group {% if form.country.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.country.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.country }} |
|
||||||
<span class="help-inline">{{ form.country.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# city #} |
|
||||||
<div class="control-group {% if form.city.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.city.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.city }} |
|
||||||
<span class="help-inline">{{ form.city.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# position #} |
|
||||||
<div class="control-group {% if form.position.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.position.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.position }} |
|
||||||
<span class="help-inline">{{ form.position.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="box span8"> |
|
||||||
<div class="box-header well"> |
|
||||||
<h2><i class="icon-pencil"></i> Дополнительная информация</h2> |
|
||||||
</div> |
|
||||||
<div class="box-content"> |
|
||||||
{# avatar #} |
|
||||||
<div class="control-group {% if form.avatar.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.avatar.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.avatar }} |
|
||||||
<span class="help-inline">{{ form.avatar.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# about #} |
|
||||||
<div class="control-group {% if form.about.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.about.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.about }} |
|
||||||
<span class="help-inline">{{ form.about.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# phone #} |
|
||||||
<div class="control-group {% if form.phone.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.phone.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.phone }} |
|
||||||
<span class="help-inline">{{ form.phone.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# web_page #} |
|
||||||
<div class="control-group {% if form.web_page.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.web_page.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.web_page }} |
|
||||||
<span class="help-inline">{{ form.web_page.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# social #} |
|
||||||
<div class="control-group {% if form.social.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.social.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.social }} |
|
||||||
<span class="help-inline">{{ form.social.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# company #} |
|
||||||
<div class="control-group {% if form.company.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.company.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.company }} |
|
||||||
<span class="help-inline">{{ form.company.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# organiser #} |
|
||||||
<div class="control-group {% if form.organiser.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.organiser.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.organiser }} |
|
||||||
<span class="help-inline">{{ form.organiser.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# is_translator #} |
|
||||||
<div class="control-group {% if form.is_translator.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.is_translator.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.is_translator }} |
|
||||||
<span class="help-inline">{{ form.is_translator.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<div class="box span8"> |
|
||||||
<div class="box-header well"> |
|
||||||
<h2><i class="icon-pencil"></i>Мета данные</h2> |
|
||||||
</div> |
|
||||||
<div class="box-content"> |
|
||||||
{# descriptions #} |
|
||||||
<div class="control-group {% if form.descriptions.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.descriptions.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.descriptions }} |
|
||||||
<span class="help-inline">{{ form.descriptions.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# title #} |
|
||||||
<div class="control-group {% if form.title.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.title.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.title }} |
|
||||||
<span class="help-inline">{{ form.title.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{# keywords #} |
|
||||||
<d iv class="control-group {% if form.keywords.errors %}error{% endif %}"> |
|
||||||
<label class="control-label">{{ form.keywords.label }}:</label> |
|
||||||
<div class="controls"> |
|
||||||
{{ form.keywords }} |
|
||||||
<span class="help-inline">{{ form.keywords.errors }}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="controls"> |
|
||||||
<input class="btn btn-large btn-primary" type="submit" value="Добавить"> |
|
||||||
<input class="btn btn-large" type="reset" value="Отмена"> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
</fieldset> |
|
||||||
</form> |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{% comment %} |
|
||||||
{% for field in form %} |
|
||||||
|
|
||||||
{{ field }} |
|
||||||
|
|
||||||
{% endfor %} |
|
||||||
{% endcomment %} |
|
||||||
|
|
||||||
{% endblock %} |
|
||||||
@ -0,0 +1,8 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from django.db import connection |
||||||
|
|
||||||
|
def db_table_exists(table_name): |
||||||
|
""" |
||||||
|
return true if table exist |
||||||
|
""" |
||||||
|
return table_name in connection.introspection.table_names() |
||||||
@ -1,8 +1,8 @@ |
|||||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||||
from django.conf.urls import patterns, include, url |
from django.conf.urls import patterns, include, url |
||||||
|
|
||||||
urlpatterns = patterns('', |
urlpatterns = patterns('organiser.views', |
||||||
url(r'^add.*/$', 'organiser.views.organiser_add'), |
url(r'^add.*/$', 'organiser_add'), |
||||||
url(r'^change/(?P<organiser_id>\d+).*/$', 'organiser.views.organiser_change'), |
url(r'^change/(?P<url>.*).*/$', 'organiser_change'), |
||||||
url(r'^all/$', 'organiser.views.organiser_all'), |
url(r'^all/$', 'organiser_all'), |
||||||
) |
) |
||||||
@ -0,0 +1,79 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from django import forms |
||||||
|
from django.conf import settings |
||||||
|
from ckeditor.widgets import CKEditorWidget |
||||||
|
from models import Translator |
||||||
|
from country.models import Country |
||||||
|
from city.models import City |
||||||
|
#functions |
||||||
|
from functions.translate import populate_all, fill_trans_fields_all |
||||||
|
from functions.files import check_tmp_files |
||||||
|
from functions.form_check import translit_with_separator |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TranslatorForm(forms.Form): |
||||||
|
""" |
||||||
|
Create Translator form for creating translator |
||||||
|
|
||||||
|
__init__ uses for dynamic creates fields |
||||||
|
|
||||||
|
save function saves data in Translator object. If it doesnt exist create new object |
||||||
|
""" |
||||||
|
car = forms.BooleanField(label='Личный автомобиль', required=False) |
||||||
|
birth = forms.DateField(label='Дата рождения') |
||||||
|
gender = forms.ChoiceField(label='Пол', choices=[('male', 'Мужской'),('female', 'Женский')]) |
||||||
|
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs): |
||||||
|
""" |
||||||
|
create dynamical translated fields fields |
||||||
|
""" |
||||||
|
super(TranslatorForm, self).__init__(*args, **kwargs) |
||||||
|
#creates translated forms example: name_ru, name_en |
||||||
|
# len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs |
||||||
|
if len(settings.LANGUAGES) in range(10): |
||||||
|
for lid, (code, name) in enumerate(settings.LANGUAGES): |
||||||
|
# uses enumerate for detect iteration number |
||||||
|
# first iteration is a default lang so it required fields |
||||||
|
required = True if lid == 0 else False |
||||||
|
self.fields['education_%s' % code] = forms.CharField(label='Образование', required=required) |
||||||
|
self.fields['specialization_%s' % code] = forms.CharField(label='Специализация', required=required) |
||||||
|
self.fields['languages_%s' % code] = forms.CharField(label='Языки', required=required) |
||||||
|
self.fields['native_language_%s' % code] = forms.CharField(label='Родной язык', required=required) |
||||||
|
self.fields['prices_%s' % code] = forms.CharField(label='Цены', |
||||||
|
required=required, widget=CKEditorWidget) |
||||||
|
self.fields['discounts_%s' % code] = forms.CharField(label='Скидки', |
||||||
|
required=False, widget=CKEditorWidget) |
||||||
|
#meta data |
||||||
|
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255, |
||||||
|
widget=forms.TextInput(attrs={'style':'width: 550px'})) |
||||||
|
self.fields['keywords_%s' % code] = forms.CharField(label='Дескрипшен', required=False, max_length=255, |
||||||
|
widget=forms.TextInput(attrs={'style':'width: 550px'})) |
||||||
|
self.fields['descriptions_%s' % code] = forms.CharField(label='Кейвордс', required=False, max_length=255, |
||||||
|
widget=forms.TextInput(attrs={'style':'width: 550px'})) |
||||||
|
|
||||||
|
def save(self, id=None): |
||||||
|
#create new conference object or get exists |
||||||
|
if not id: |
||||||
|
translator = Translator() |
||||||
|
else: |
||||||
|
translator = Translator.objects.get(id=id) |
||||||
|
|
||||||
|
data = self.cleaned_data |
||||||
|
|
||||||
|
translator.car = data['car'] |
||||||
|
translator.birth = data['birth'] |
||||||
|
translator.gender = data['gender'] |
||||||
|
|
||||||
|
#will be saved populated fields |
||||||
|
zero_fields = {} |
||||||
|
#fills all translated fields with data |
||||||
|
#if saves new object, will fill city object. otherwise existing object of City model |
||||||
|
fill_trans_fields_all(Translator, translator, data, id, zero_fields) |
||||||
|
#autopopulate |
||||||
|
#populate empty fields and fields which was already populated |
||||||
|
conference_id = getattr(conference, 'id') |
||||||
|
populate_all(Conference, data, conference_id, zero_fields) |
||||||
|
#save files |
||||||
|
check_tmp_files(conference, data['key']) |
||||||
@ -0,0 +1,41 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from django.db import models |
||||||
|
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager |
||||||
|
# |
||||||
|
from functions.custom_fields import EnumField |
||||||
|
|
||||||
|
|
||||||
|
class TranslatorManager(TranslationManager): |
||||||
|
def safe_get(self, **kwargs): |
||||||
|
model = self.model |
||||||
|
try: |
||||||
|
return model.objects.get(**kwargs) |
||||||
|
except: |
||||||
|
return None |
||||||
|
|
||||||
|
|
||||||
|
class Translator(TranslatableModel): |
||||||
|
""" |
||||||
|
Extra information about translators |
||||||
|
""" |
||||||
|
#set manager of this model |
||||||
|
objects = TranslationManager() |
||||||
|
|
||||||
|
gender = EnumField(values=('male', 'female')) |
||||||
|
|
||||||
|
birth = models.DateField(verbose_name='Дата рождения') |
||||||
|
car = models.BooleanField(verbose_name='Личный автомобиль', default=0) |
||||||
|
|
||||||
|
translations = TranslatedFields( |
||||||
|
education = models.CharField(verbose_name='Образование', max_length=255), |
||||||
|
specialization = models.CharField(verbose_name='Специализация', max_length=255), |
||||||
|
languages = models.CharField(verbose_name='Языки', max_length=255), |
||||||
|
native_language= models.CharField(verbose_name='Родной язык', max_length=255), |
||||||
|
|
||||||
|
prices = models.TextField(verbose_name='Тарифы'), |
||||||
|
discounts = models.TextField(verbose_name='Скидки', blank=True), |
||||||
|
#-----meta |
||||||
|
title = models.CharField(max_length=255, blank=True), |
||||||
|
descriptions = models.CharField(max_length=255, blank=True), |
||||||
|
keywords = models.CharField(max_length=255, blank=True), |
||||||
|
) |
||||||
@ -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,9 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from django.conf.urls import patterns, url |
||||||
|
|
||||||
|
urlpatterns = patterns('translator.views', |
||||||
|
url(r'^add.*/$', 'translator_add'), |
||||||
|
url(r'^delete/(?P<url>.*)/$', 'translator_delete'), |
||||||
|
url(r'^change/(?P<url>.*)/$', 'translator_change'), |
||||||
|
url(r'^all/$', 'translator_all'), |
||||||
|
) |
||||||
@ -0,0 +1,10 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from django.shortcuts import render_to_response |
||||||
|
from django.http import HttpResponseRedirect |
||||||
|
from django.core.context_processors import csrf |
||||||
|
from django.conf import settings |
||||||
|
from django.contrib.auth.decorators import login_required |
||||||
|
#models and forms |
||||||
|
from models import Translator |
||||||
|
#custom views |
||||||
|
from functions.custom_views import objects_list, delete_object |
||||||
Loading…
Reference in new issue