From a330b278af60d9b35713b7aade87b0402c814231 Mon Sep 17 00:00:00 2001 From: Slava Kyrachevsky Date: Wed, 25 Jan 2017 16:12:55 +0200 Subject: [PATCH] =?UTF-8?q?=D0=BC=D1=83=D0=BB=D1=8C=D1=82=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B0=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2=20=D0=B2=20=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=20?= =?UTF-8?q?=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/article/admin.py | 12 +- apps/conference/admin.py | 6 +- apps/exposition/admin.py | 5 +- apps/file/admin.py | 75 +++ apps/file/admin_urls.py | 29 + apps/file/forms.py | 34 +- apps/file/migrations/0001_initial.py | 620 ++++++++++++++++++ apps/file/migrations/__init__.py | 0 apps/file/models.py | 29 +- apps/photologue/admin.py | 2 +- apps/place_conference/admin.py | 12 +- apps/place_exposition/admin.py | 12 +- proj/admin.py | 98 +-- proj/admin_urls.py | 4 +- static/jQuery-filer/js/init.js | 26 +- static/jQuery-filer/js/jquery.filer.js | 6 - templates/c_admin/article/blog_form.html | 92 +-- templates/c_admin/conference/conference.html | 204 +++--- templates/c_admin/exposition/exposition.html | 133 ++-- templates/c_admin/file/file_update.html | 26 + templates/c_admin/file_list.html | 25 - templates/c_admin/includes/file_form.html | 49 -- templates/c_admin/includes/filegallery.html | 19 + templates/c_admin/includes/photogallery.html | 6 - .../place_conference/place_conference.html | 40 +- .../place_exposition/place_exposition.html | 41 +- 26 files changed, 1013 insertions(+), 592 deletions(-) create mode 100644 apps/file/admin_urls.py create mode 100644 apps/file/migrations/0001_initial.py create mode 100644 apps/file/migrations/__init__.py create mode 100644 templates/c_admin/file/file_update.html delete mode 100644 templates/c_admin/file_list.html delete mode 100644 templates/c_admin/includes/file_form.html create mode 100644 templates/c_admin/includes/filegallery.html diff --git a/apps/article/admin.py b/apps/article/admin.py index 8d3d0c4a..18b67c93 100644 --- a/apps/article/admin.py +++ b/apps/article/admin.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- from django.shortcuts import render_to_response, get_object_or_404 -from django.http import HttpResponseRedirect, HttpResponse +from django.http import HttpResponseRedirect from django.db import models from django.core.context_processors import csrf from django.conf import settings @@ -8,7 +8,6 @@ from django.contrib import admin from django.contrib.auth.decorators import login_required from django.contrib.contenttypes.models import ContentType from django.views.generic import DeleteView -from django.utils.translation import ugettext_lazy as _ from modeltranslation.admin import TabbedTranslationAdmin from ckeditor.widgets import CKEditorWidget @@ -19,8 +18,8 @@ from .forms import ArticleForm, ArticleDeleteForm, NewsForm from .models import Article, Author from theme.models import Tag -from file.models import FileModel, TmpFile -from file.forms import FileModelForm, FileForm +from file.models import FileModel +from file.forms import FileModelForm #custom views from functions.custom_views import objects_list, add_object_with_file, delete_object @@ -224,12 +223,7 @@ class BlogView(FormView): def get_context_data(self, **kwargs): context = super(BlogView, self).get_context_data(**kwargs) self.set_obj() - context['article'] = self.obj - if context['article']: - context['file_form'] = FileForm(initial={'model': 'article.Article'}) - context['files'] = FileModel.objects.filter(content_type=ContentType.objects.get_for_model(context['article']), - object_id=getattr(context['article'], 'id')) context['languages'] = settings.LANGUAGES return context diff --git a/apps/conference/admin.py b/apps/conference/admin.py index 3d4e3af7..2d02138f 100644 --- a/apps/conference/admin.py +++ b/apps/conference/admin.py @@ -23,7 +23,7 @@ from sorl.thumbnail.admin.current import AdminImageWidget from exposition.admin import get_by_lang from city.models import City -from file.forms import FileForm, FileModelForm +from file.forms import FileModelForm from file.models import FileModel, TmpFile from forms import ( ConferenceChangeForm, @@ -329,11 +329,7 @@ class ConferenceView(AdminView): context = super(ConferenceView, self).get_context_data(**kwargs) obj = self.set_obj() if obj: - context['stat_form'] = StatisticForm() - context['file_form'] = FileForm(initial={'model': 'conference.Conference'}) - files = FileModel.objects.filter(content_type=ContentType.objects.get_for_model(obj),object_id=getattr(obj, 'id')) - context['files'] = files context['timetable_form'] = TimeTableForm() context['timetables'] = TimeTable.objects.filter(conference=obj) diff --git a/apps/exposition/admin.py b/apps/exposition/admin.py index 390bb603..34c181db 100644 --- a/apps/exposition/admin.py +++ b/apps/exposition/admin.py @@ -14,7 +14,7 @@ from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render_to_response from django.utils import translation from django.views.decorators.csrf import csrf_exempt -from file.forms import FileForm, FileModelForm +from file.forms import FileModelForm from file.models import FileModel, TmpFile from forms import ( ExpositionCreateForm, @@ -331,9 +331,6 @@ class ExpositionView(AdminView): obj = self.set_obj() if obj: context['stat_form'] = StatisticForm() - context['file_form'] = FileForm(initial={'model': 'exposition.Exposition'}) - files = FileModel.objects.filter(content_type=ContentType.objects.get_for_model(obj),object_id=getattr(obj, 'id')) - context['files'] = files context['timetable_form'] = TimeTableForm() context['timetables'] = TimeTable.objects.filter(exposition=obj) diff --git a/apps/file/admin.py b/apps/file/admin.py index e69de29b..5a2a1b0a 100644 --- a/apps/file/admin.py +++ b/apps/file/admin.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +from django.core.urlresolvers import reverse +from django.views.decorators.csrf import csrf_exempt +from django.db.models.loading import get_model +from django.contrib.contenttypes.models import ContentType +from django.http import HttpResponse +from django.views.generic import UpdateView + +from .models import FileModel +from .forms import FileForm, FileUpdateForm + +import json + + +@csrf_exempt +def ajax_post_file(request, obj_id): + """ + Takes file and file data and save it + """ + data = {'success': False} + # takes data from hidden input "model" and initial Model + Model = get_model(request.GET['model'].split('.')[0], + request.GET['model'].split('.')[1]) + # initial model object + obj = Model.objects.get(id=obj_id) + + if request.is_ajax() and request.method == 'POST': + file_form = FileForm(request.POST, request.FILES) + if file_form.is_valid(): + file_form.save(request.FILES, obj) + data['success'] = True + else: + data['errors'] = file_form.errors + + if request.is_ajax() and request.method == 'GET': + files = FileModel.objects.filter( + content_type=ContentType.objects.get_for_model(obj), + object_id=obj_id + ) + files_data = [] + for f in files: + files_data.append({ + 'name': f.file_name or f.file_path.name, + 'size': f.file_path.size, + 'file': f.file_path.url, + 'type': 'file', + 'remove_url': reverse('ajax_delete_file', args=[f.pk]), + 'detail_link': reverse('file_update', args=[f.pk]) + }) + data['success'] = True + data['files'] = files_data + + return HttpResponse(json.dumps(data), content_type='application/json') + + +def ajax_delete_file(request, id): + """ + delete file + """ + if request.is_ajax(): + f = FileModel.objects.get(id=id) + f.delete() + data = {'success': True} + else: + data = {'success': False} + return HttpResponse(json.dumps(data), content_type='application/json') + + +class FileUpdateView(UpdateView): + """ + Представление обновления файла + """ + template_name = 'c_admin/file/file_update.html' + form_class = FileUpdateForm + model = FileModel diff --git a/apps/file/admin_urls.py b/apps/file/admin_urls.py new file mode 100644 index 00000000..537cb89d --- /dev/null +++ b/apps/file/admin_urls.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +from django.conf.urls import patterns, url +from django.contrib.admin.views.decorators import staff_member_required + +from .admin import FileUpdateView +from functions import required + + +urlpatterns = required( + staff_member_required, + patterns( + '', + url( + r'^ajax_post_file/(?P\d+)/$', + 'file.admin.ajax_post_file', + name='ajax_post_file' + ), + url( + r'^ajax_delete_file/(?P\d+)/', + 'file.admin.ajax_delete_file', + name='ajax_delete_file' + ), + url( + r'^update/(?P\d+)/', + FileUpdateView.as_view(), + name='file_update' + ), + ) +) diff --git a/apps/file/forms.py b/apps/file/forms.py index 2ae1a8a8..c6d0c30a 100644 --- a/apps/file/forms.py +++ b/apps/file/forms.py @@ -5,7 +5,7 @@ from django.contrib.contenttypes.models import ContentType from ckeditor.widgets import CKEditorWidget #models from country.models import Country -from models import FileModel, TmpFile, IMG_TYPES, PURPOSES, Photo +from .models import FileModel, TmpFile, IMG_TYPES, PURPOSES, Photo #functions from functions.translate import populate, fill_trans_fields_all #python @@ -17,8 +17,11 @@ from django.utils.translation import ugettext as _ class FileForm(forms.Form): file_path = forms.FileField(label=_(u'Выберите файл')) model = forms.CharField(required=False, widget=forms.HiddenInput()) - purposes = [('scheme teritory',_(u'Схема территории')),('preview',_(u'Превью')), ('preview2',_(u'Превью2'))] - purpose = forms.ChoiceField(label=_(u'Назначение'), choices=purposes) + purpose = forms.ChoiceField( + label=_(u'Назначение'), + choices=PURPOSES, + required=False + ) def __init__(self, *args, **kwargs): """ @@ -30,10 +33,8 @@ class FileForm(forms.Form): 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['file_name_%s'%code] = forms.CharField(label=_(u'Имя файла'),required=False, widget=forms.TextInput(attrs={'placeholder': 'Имя'})) - self.fields['description_%s'%code] = forms.CharField(label=_(u'Описание'), required=False, widget=forms.Textarea()) + self.fields['file_name_%s' % code] = forms.CharField(label=_(u'Имя файла'), required=False, widget=forms.TextInput(attrs={'placeholder': 'Имя'})) + self.fields['description_%s' % code] = forms.CharField(label=_(u'Описание'), required=False, widget=forms.Textarea()) def save(self, request, obj=None): """ @@ -59,7 +60,10 @@ class FileForm(forms.Form): #------- file_obj.file_path = request['file_path'] - file_obj.purpose = data['purpose'] + if data.get('purpose'): + file_obj.purpose = data.get('purpose') + else: + file_obj.purpose = 'preview' #type of file type = str(data['file_path']).split('.')[-1] #if type is image save fields with image size @@ -79,6 +83,16 @@ class FileForm(forms.Form): return file_obj + +class FileUpdateForm(forms.ModelForm): + """ + Форма обновления файла в админ панели + """ + class Meta: + model = FileModel + fields = ('file_path',) + + class FileModelForm(forms.Form): """ Create FileModel form @@ -92,8 +106,7 @@ class FileModelForm(forms.Form): key = forms.CharField(required=False, widget=forms.HiddenInput()) model = forms.CharField(required=False, widget=forms.HiddenInput()) - purposes = [(item1, item2) for item1, item2 in PURPOSES] - purpose = forms.ChoiceField(label=_(u'Назаначение'), choices=purposes) + purpose = forms.ChoiceField(label=_(u'Назаначение'), choices=PURPOSES) def __init__(self, *args, **kwargs): """ @@ -167,6 +180,7 @@ class FileModelForm(forms.Form): return file_obj + class PhotoForm(forms.Form): file_path = forms.FileField(label=_(u'Выберите файл')) # uses for comparing with TmpFile key diff --git a/apps/file/migrations/0001_initial.py b/apps/file/migrations/0001_initial.py new file mode 100644 index 00000000..aa0d2487 --- /dev/null +++ b/apps/file/migrations/0001_initial.py @@ -0,0 +1,620 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'FileModelTranslation' + db.create_table(u'file_filemodel_translation', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('file_name', self.gf('django.db.models.fields.CharField')(max_length=50, blank=True)), + ('description', self.gf('django.db.models.fields.TextField')(blank=True)), + ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)), + ('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', null=True, to=orm['file.FileModel'])), + )) + db.send_create_signal(u'file', ['FileModelTranslation']) + + # Adding unique constraint on 'FileModelTranslation', fields ['language_code', 'master'] + db.create_unique(u'file_filemodel_translation', ['language_code', 'master_id']) + + # Adding model 'FileModel' + db.create_table(u'file_filemodel', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'], null=True)), + ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)), + ('file_path', self.gf('django.db.models.fields.files.FileField')(max_length=100)), + ('file_type', self.gf('functions.custom_fields.EnumField')(default='PDF', values=('PDF', 'DOC', 'TXT', 'OTHER', 'JPG', 'BMP', 'PNG', 'GIF'), blank=True)), + ('purpose', self.gf('functions.custom_fields.EnumField')(default='photo', values=['photo', 'flat', 'logo', 'map', 'scheme teritory', 'diplom', 'preview', 'preview2'])), + ('img_width', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)), + ('img_height', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)), + ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal(u'file', ['FileModel']) + + # Adding model 'TmpFileTranslation' + db.create_table(u'file_tmpfile_translation', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('file_name', self.gf('django.db.models.fields.CharField')(max_length=50, blank=True)), + ('description', self.gf('django.db.models.fields.TextField')(blank=True)), + ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)), + ('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', null=True, to=orm['file.TmpFile'])), + )) + db.send_create_signal(u'file', ['TmpFileTranslation']) + + # Adding unique constraint on 'TmpFileTranslation', fields ['language_code', 'master'] + db.create_unique(u'file_tmpfile_translation', ['language_code', 'master_id']) + + # Adding model 'TmpFile' + db.create_table(u'file_tmpfile', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('file_path', self.gf('django.db.models.fields.files.FileField')(max_length=100)), + ('file_type', self.gf('functions.custom_fields.EnumField')(default='PDF', values=('PDF', 'DOC', 'TXT', 'OTHER', 'JPG', 'BMP', 'PNG', 'GIF'), blank=True)), + ('purpose', self.gf('functions.custom_fields.EnumField')(default='photo', values=['photo', 'flat', 'logo', 'map', 'scheme teritory', 'diplom', 'preview', 'preview2'])), + ('img_width', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)), + ('img_height', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)), + ('key', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)), + ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal(u'file', ['TmpFile']) + + # Adding model 'UserMark' + db.create_table(u'file_usermark', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['accounts.User'])), + ('top', self.gf('django.db.models.fields.PositiveSmallIntegerField')()), + ('left', self.gf('django.db.models.fields.PositiveSmallIntegerField')()), + ('height', self.gf('django.db.models.fields.PositiveSmallIntegerField')()), + ('width', self.gf('django.db.models.fields.PositiveSmallIntegerField')()), + )) + db.send_create_signal(u'file', ['UserMark']) + + # Adding model 'PhotoTranslation' + db.create_table(u'file_photo_translation', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)), + ('description', self.gf('django.db.models.fields.TextField')(blank=True)), + ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)), + ('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', null=True, to=orm['file.Photo'])), + )) + db.send_create_signal(u'file', ['PhotoTranslation']) + + # Adding unique constraint on 'PhotoTranslation', fields ['language_code', 'master'] + db.create_unique(u'file_photo_translation', ['language_code', 'master_id']) + + # Adding model 'Photo' + db.create_table(u'file_photo', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'], null=True)), + ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)), + ('file_path', self.gf('django.db.models.fields.files.ImageField')(max_length=100)), + ('width', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)), + ('height', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)), + ('order', self.gf('django.db.models.fields.PositiveSmallIntegerField')(default=0)), + ('view_count', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)), + ('file_type', self.gf('functions.custom_fields.EnumField')(default='PDF', values=('PDF', 'DOC', 'TXT', 'OTHER', 'JPG', 'BMP', 'PNG', 'GIF'), blank=True)), + ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal(u'file', ['Photo']) + + # Adding M2M table for field users on 'Photo' + m2m_table_name = db.shorten_name(u'file_photo_users') + db.create_table(m2m_table_name, ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('photo', models.ForeignKey(orm[u'file.photo'], null=False)), + ('usermark', models.ForeignKey(orm[u'file.usermark'], null=False)) + )) + db.create_unique(m2m_table_name, ['photo_id', 'usermark_id']) + + + def backwards(self, orm): + # Removing unique constraint on 'PhotoTranslation', fields ['language_code', 'master'] + db.delete_unique(u'file_photo_translation', ['language_code', 'master_id']) + + # Removing unique constraint on 'TmpFileTranslation', fields ['language_code', 'master'] + db.delete_unique(u'file_tmpfile_translation', ['language_code', 'master_id']) + + # Removing unique constraint on 'FileModelTranslation', fields ['language_code', 'master'] + db.delete_unique(u'file_filemodel_translation', ['language_code', 'master_id']) + + # Deleting model 'FileModelTranslation' + db.delete_table(u'file_filemodel_translation') + + # Deleting model 'FileModel' + db.delete_table(u'file_filemodel') + + # Deleting model 'TmpFileTranslation' + db.delete_table(u'file_tmpfile_translation') + + # Deleting model 'TmpFile' + db.delete_table(u'file_tmpfile') + + # Deleting model 'UserMark' + db.delete_table(u'file_usermark') + + # Deleting model 'PhotoTranslation' + db.delete_table(u'file_photo_translation') + + # Deleting model 'Photo' + db.delete_table(u'file_photo') + + # Removing M2M table for field users on 'Photo' + db.delete_table(db.shorten_name(u'file_photo_users')) + + + models = { + u'accounts.user': { + 'Meta': {'ordering': "['-rating']", 'object_name': 'User'}, + 'blocked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'company': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'users'", 'null': 'True', 'to': u"orm['company.Company']"}), + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'date_registered': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '255', 'db_index': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'organiser': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['organiser.Organiser']", 'unique': 'True', 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'position': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'rating': ('django.db.models.fields.IntegerField', [], {'default': '100'}), + 'readonly': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'translator': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['translator.Translator']", 'blank': 'True', 'unique': 'True'}), + 'url': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'blank': 'True'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}) + }, + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'city.city': { + 'Meta': {'unique_together': '()', 'object_name': 'City', 'index_together': '()'}, + 'code_IATA': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['directories.Iata']", 'null': 'True', 'blank': 'True'}), + 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cities'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['country.Country']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'old_url': ('django.db.models.fields.CharField', [], {'max_length': '55'}), + 'phone_code': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'population': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}), + 'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}) + }, + u'company.company': { + 'Meta': {'ordering': "['-rating', 'id']", 'unique_together': '()', 'object_name': 'Company', 'index_together': '()'}, + 'address': ('functions.custom_fields.LocationField', [], {'blank': 'True'}), + 'blocked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'city': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}), + 'country': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['country.Country']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'created_company'", 'null': 'True', 'to': u"orm['accounts.User']"}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'facebook': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'foundation': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'linkedin': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rating': ('django.db.models.fields.IntegerField', [], {'default': '100'}), + 'staff_number': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + 'tag': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Tag']"}), + 'theme': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Theme']"}), + 'twitter': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'url': ('django.db.models.fields.SlugField', [], {'max_length': '255'}), + 'vk': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'country.area': { + 'Meta': {'ordering': "['translations__name']", 'unique_together': '()', 'object_name': 'Area', 'index_together': '()'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'country.country': { + 'Meta': {'ordering': "['translations__name']", 'unique_together': '()', 'object_name': 'Country', 'index_together': '()'}, + 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Area']"}), + 'big_cities': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'cities'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['city.City']"}), + 'capital': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'capital'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}), + 'country_code': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'currency': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['directories.Currency']", 'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'language': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['directories.Language']", 'null': 'True', 'blank': 'True'}), + 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': 'True'}), + 'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'old_url': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '55'}), + 'phone_code': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'population': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}), + 'teritory': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'time_delivery': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'timezone': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}) + }, + u'directories.currency': { + 'Meta': {'unique_together': '()', 'object_name': 'Currency', 'index_together': '()'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '3'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'directories.iata': { + 'Meta': {'object_name': 'Iata'}, + 'airport': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'code': ('django.db.models.fields.CharField', [], {'max_length': '4'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + u'directories.language': { + 'Meta': {'unique_together': '()', 'object_name': 'Language', 'index_together': '()'}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + }, + u'expobanner.banner': { + 'Meta': {'ordering': "['sort']", 'object_name': 'Banner'}, + 'alt': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'cookie': ('django.db.models.fields.CharField', [], {'default': "'expo_b_default_popup'", 'max_length': '30', 'null': 'True', 'blank': 'True'}), + 'country': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['country.Country']", 'null': 'True', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'customer': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['expobanner.Customer']", 'null': 'True', 'blank': 'True'}), + 'flash': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'fr': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2017, 1, 25, 0, 0)'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'banners'", 'null': 'True', 'to': u"orm['expobanner.BannerGroup']"}), + 'html': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'img': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'link': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'often': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1', 'null': 'True', 'blank': 'True'}), + 'paid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'popup': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'sort': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '500'}), + 'stat_pswd': ('django.db.models.fields.CharField', [], {'max_length': '16'}), + 'text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'theme': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Theme']", 'null': 'True', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'to': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'urls': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'url_banners'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['expobanner.URL']"}) + }, + u'expobanner.bannergroup': { + 'Meta': {'ordering': "['name']", 'object_name': 'BannerGroup'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'height': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'speed': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '2000'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}) + }, + u'expobanner.customer': { + 'Meta': {'ordering': "['name']", 'object_name': 'Customer'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + u'expobanner.top': { + 'Meta': {'ordering': "['position']", 'object_name': 'Top'}, + 'base_catalog': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'catalog': ('django.db.models.fields.CharField', [], {'max_length': '16'}), + 'cities': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'top_in_set'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['city.City']"}), + 'country': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['country.Country']", 'null': 'True', 'blank': 'True'}), + 'excluded_cities': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['city.City']", 'null': 'True', 'blank': 'True'}), + 'excluded_tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Tag']", 'null': 'True', 'blank': 'True'}), + 'fr': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2017, 1, 25, 0, 0)'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'link': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['expobanner.Banner']"}), + 'months': ('functions.custom_fields.MonthMultiSelectField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'position': ('django.db.models.fields.PositiveIntegerField', [], {'default': '2', 'null': 'True', 'blank': 'True'}), + 'stat_pswd': ('django.db.models.fields.CharField', [], {'max_length': '16'}), + 'theme': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Theme']", 'null': 'True', 'blank': 'True'}), + 'to': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'years': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}) + }, + u'expobanner.url': { + 'Meta': {'ordering': "['-created_at']", 'object_name': 'URL'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'regex': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'site_urls'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['sites.Site']"}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '2048'}) + }, + u'file.filemodel': { + 'Meta': {'unique_together': '()', 'object_name': 'FileModel', 'index_together': '()'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']", 'null': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'file_path': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'file_type': ('functions.custom_fields.EnumField', [], {'default': "'PDF'", 'values': "('PDF', 'DOC', 'TXT', 'OTHER', 'JPG', 'BMP', 'PNG', 'GIF')", 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'img_height': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'img_width': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'purpose': ('functions.custom_fields.EnumField', [], {'default': "'photo'", 'values': "['photo', 'flat', 'logo', 'map', 'scheme teritory', 'diplom', 'preview', 'preview2']"}) + }, + u'file.filemodeltranslation': { + 'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'FileModelTranslation', 'db_table': "u'file_filemodel_translation'", 'index_together': '()'}, + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'file_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['file.FileModel']"}) + }, + u'file.photo': { + 'Meta': {'unique_together': '()', 'object_name': 'Photo', 'index_together': '()'}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']", 'null': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'file_path': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + 'file_type': ('functions.custom_fields.EnumField', [], {'default': "'PDF'", 'values': "('PDF', 'DOC', 'TXT', 'OTHER', 'JPG', 'BMP', 'PNG', 'GIF')", 'blank': 'True'}), + 'height': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['file.UserMark']", 'null': 'True', 'symmetrical': 'False'}), + 'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'width': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + u'file.phototranslation': { + 'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'PhotoTranslation', 'db_table': "u'file_photo_translation'", 'index_together': '()'}, + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['file.Photo']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + u'file.tmpfile': { + 'Meta': {'unique_together': '()', 'object_name': 'TmpFile', 'index_together': '()'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'file_path': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'file_type': ('functions.custom_fields.EnumField', [], {'default': "'PDF'", 'values': "('PDF', 'DOC', 'TXT', 'OTHER', 'JPG', 'BMP', 'PNG', 'GIF')", 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'img_height': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'img_width': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'purpose': ('functions.custom_fields.EnumField', [], {'default': "'photo'", 'values': "['photo', 'flat', 'logo', 'map', 'scheme teritory', 'diplom', 'preview', 'preview2']"}) + }, + u'file.tmpfiletranslation': { + 'Meta': {'unique_together': "[('language_code', 'master')]", 'object_name': 'TmpFileTranslation', 'db_table': "u'file_tmpfile_translation'", 'index_together': '()'}, + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'file_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'null': 'True', 'to': u"orm['file.TmpFile']"}) + }, + u'file.usermark': { + 'Meta': {'object_name': 'UserMark'}, + 'height': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'left': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), + 'top': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"}), + 'width': ('django.db.models.fields.PositiveSmallIntegerField', [], {}) + }, + u'organiser.organiser': { + 'Meta': {'unique_together': '()', 'object_name': 'Organiser', 'index_together': '()'}, + 'active': ('django.db.models.fields.NullBooleanField', [], {'default': '0', 'null': 'True', 'blank': 'True'}), + 'address': ('functions.custom_fields.LocationField', [], {'null': 'True', 'blank': 'True'}), + 'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}), + 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'events_number': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'facebook': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'foundation': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'linkedin': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'place_conference': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'organiser_place_conference'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['place_conference.PlaceConference']"}), + 'place_exposition': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'organiser_place_exposition'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['place_exposition.PlaceExposition']"}), + 'rating': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'staff_number': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'tag': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Tag']", 'null': 'True', 'blank': 'True'}), + 'theme': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Theme']", 'null': 'True', 'blank': 'True'}), + 'twitter': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'url': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}), + 'vk': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) + }, + u'photologue.gallery': { + 'Meta': {'ordering': "['-date_added']", 'unique_together': '()', 'object_name': 'Gallery', 'index_together': '()'}, + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'photos': ('sortedm2m.fields.SortedManyToManyField', [], {'blank': 'True', 'related_name': "'galleries'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['photologue.Photo']"}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '200'}), + 'tags': ('photologue.models.TagField', [], {'max_length': '255', 'blank': 'True'}) + }, + u'photologue.photo': { + 'Meta': {'ordering': "['sort']", 'unique_together': '()', 'object_name': 'Photo', 'index_together': '()'}, + 'crop_from': ('django.db.models.fields.CharField', [], {'default': "'center'", 'max_length': '10', 'blank': 'True'}), + 'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'effect': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'photo_related'", 'null': 'True', 'to': u"orm['photologue.PhotoEffect']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '200'}), + 'sort': ('django.db.models.fields.PositiveIntegerField', [], {'default': '10', 'null': 'True', 'db_index': 'True'}), + 'tags': ('photologue.models.TagField', [], {'max_length': '255', 'blank': 'True'}), + 'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['photologue.UserMark']", 'null': 'True', 'symmetrical': 'False'}), + 'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) + }, + u'photologue.photoeffect': { + 'Meta': {'object_name': 'PhotoEffect'}, + 'background_color': ('django.db.models.fields.CharField', [], {'default': "'#FFFFFF'", 'max_length': '7'}), + 'brightness': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), + 'color': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), + 'contrast': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'filters': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}), + 'reflection_size': ('django.db.models.fields.FloatField', [], {'default': '0'}), + 'reflection_strength': ('django.db.models.fields.FloatField', [], {'default': '0.6'}), + 'sharpness': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), + 'transpose_method': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'}) + }, + u'photologue.usermark': { + 'Meta': {'object_name': 'UserMark'}, + 'height': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'left': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), + 'top': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'marks'", 'to': u"orm['accounts.User']"}), + 'width': ('django.db.models.fields.PositiveSmallIntegerField', [], {}) + }, + u'place_conference.placeconference': { + 'Meta': {'unique_together': '()', 'object_name': 'PlaceConference', 'index_together': '()'}, + 'address': ('functions.custom_fields.LocationField', [], {}), + 'amount_halls': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'banquet_hall': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'catering': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'city': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place_conferences'", 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}), + 'conference_call': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'exp_hall_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'exposition_hall': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'hotel': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'multimedia_equipment': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'top': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['expobanner.Top']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'total_capacity': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'translate_equipment': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'type': ('functions.custom_fields.EnumField', [], {'default': "'Convention centre'", 'values': "['Convention centre', 'Exposition centre']"}), + 'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), + 'video_link': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'views': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'virtual_tour': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'web_page': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'wifi': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}) + }, + u'place_exposition.placeexposition': { + 'Meta': {'ordering': "['-rating', 'id']", 'unique_together': '()', 'object_name': 'PlaceExposition', 'index_together': '()'}, + 'address': ('functions.custom_fields.LocationField', [], {}), + 'bank': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'business_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'cafe': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'children_room': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'city': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place_expositions'", 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}), + 'closed_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'conference_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'disabled_service': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'event_in_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': 'True'}), + 'mobile_application': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'online_registration': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'open_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'parking': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'partner': ('django.db.models.fields.NullBooleanField', [], {'default': '0', 'null': 'True', 'blank': 'True'}), + 'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'photogallery': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['photologue.Gallery']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'press_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'rating': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'terminals': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), + 'top': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['expobanner.Top']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}), + 'total_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'total_halls': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'total_pavilions': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'type': ('functions.custom_fields.EnumField', [], {'default': "'Exposition complex'", 'values': "['Exposition complex', 'Convention centre', 'Exposition centre']"}), + 'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}), + 'views': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), + 'virtual_tour': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'web_page': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), + 'wifi': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}) + }, + u'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'theme.tag': { + 'Meta': {'unique_together': '()', 'object_name': 'Tag', 'index_together': '()'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'old_url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}), + 'theme': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tags'", 'on_delete': 'models.PROTECT', 'to': u"orm['theme.Theme']"}), + 'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}) + }, + u'theme.theme': { + 'Meta': {'unique_together': '()', 'object_name': 'Theme', 'index_together': '()'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'main_page_conf': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'main_page_expo': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), + 'old_url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}), + 'types': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}), + 'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}) + }, + u'translator.translator': { + 'Meta': {'unique_together': '()', 'object_name': 'Translator', 'index_together': '()'}, + 'birth': ('django.db.models.fields.DateField', [], {}), + 'car': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'gender': ('functions.custom_fields.EnumField', [], {'default': "'male'", 'values': "('male', 'female')"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['file'] \ No newline at end of file diff --git a/apps/file/migrations/__init__.py b/apps/file/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/apps/file/models.py b/apps/file/models.py index 9b56c2c2..5200d76b 100644 --- a/apps/file/models.py +++ b/apps/file/models.py @@ -14,15 +14,16 @@ import os FILE_TYPES = ('PDF', 'DOC', 'TXT', 'OTHER') IMG_TYPES = ('JPG', 'BMP', 'PNG', 'GIF',) -PURPOSES = (('photo', _(u'Фото')), - ('flat', _(u'Флаг')), - ('logo',_(u'Лого')), - ('map',_(u'Карта')), - ('scheme teritory',_(u'Схема територии')), - ('diplom',_(u'Дипломы')), - ('preview',_(u'Превью')), - ('preview2',_(u'Превью')), - ) +PURPOSES = ( + ('photo', _(u'Фото')), + ('flat', _(u'Флаг')), + ('logo', _(u'Лого')), + ('map', _(u'Карта')), + ('scheme teritory', _(u'Схема територии')), + ('diplom', _(u'Дипломы')), + ('preview', _(u'Превью')), + ('preview2', _(u'Превью')), +) class FileModel(TranslatableModel): @@ -52,10 +53,12 @@ class FileModel(TranslatableModel): object_id = models.PositiveIntegerField(blank=True, null=True) object = generic.GenericForeignKey(content_type, object_id) - file_path = models.FileField(upload_to=get_upload_path) + file_path = models.FileField(u'Файл', upload_to=get_upload_path) # file_type and purposes uses EnumField for creating Enum type field in Mysql database file_type = EnumField(values=FILE_TYPES+IMG_TYPES, blank=True) - purpose = EnumField(values=[item1 for item1, item2 in PURPOSES]) + purpose = EnumField( + values=[item1 for item1, item2 in PURPOSES] + ) img_width = models.PositiveIntegerField(blank=True, null=True) img_height = models.PositiveIntegerField(blank=True, null=True) @@ -64,8 +67,8 @@ class FileModel(TranslatableModel): modified = models.DateTimeField(auto_now=True) # translations is translated fields translations = TranslatedFields( - file_name = models.CharField(max_length=50, blank=True), - description = models.TextField(blank=True), + file_name=models.CharField(max_length=50, blank=True), + description=models.TextField(blank=True), ) diff --git a/apps/photologue/admin.py b/apps/photologue/admin.py index 19cc93ba..f5a0b993 100644 --- a/apps/photologue/admin.py +++ b/apps/photologue/admin.py @@ -157,7 +157,7 @@ def upload_photo(request, id, Model): elif request.is_ajax() and request.method == 'GET': data['success'] = True - data['images'] = get_images_list(obj) + data['files'] = get_images_list(obj) return HttpResponse(json.dumps(data), content_type='application/json') diff --git a/apps/place_conference/admin.py b/apps/place_conference/admin.py index fbb8db65..1da7a783 100644 --- a/apps/place_conference/admin.py +++ b/apps/place_conference/admin.py @@ -21,6 +21,7 @@ import random from functions.custom_views import objects_list, delete_object from functions.views_help import get_referer from functions.admin_views import AdminListView +from functions.admin_views import AdminView def conference_all(request): @@ -189,8 +190,6 @@ def conference_change(request, url): return render_to_response('place_conference_add.html', args) -from functions.admin_views import AdminView -from file.forms import FileModelForm, FileForm class PlaceConferenceView(AdminView): form_class = ConferenceForm model = PlaceConference @@ -233,15 +232,6 @@ class PlaceConferenceView(AdminView): return form_class() - def get_context_data(self, **kwargs): - context = super(PlaceConferenceView, self).get_context_data(**kwargs) - obj = self.set_obj() - if obj: - context['file_form'] = FileForm(initial={'model': 'place_conference.PlaceConference'}) - files = FileModel.objects.filter(content_type=ContentType.objects.get_for_model(obj),object_id=getattr(obj, 'id')) - context['files'] = files - return context - class PlaceConferenceListView(AdminListView): template_name = 'c_admin/place_conference/place_conference_list.html' form_class = PlaceConferenceFilterForm diff --git a/apps/place_exposition/admin.py b/apps/place_exposition/admin.py index 2f642177..ff308ee6 100644 --- a/apps/place_exposition/admin.py +++ b/apps/place_exposition/admin.py @@ -21,10 +21,10 @@ from functions.http import JsonResponse from exposition.admin import get_by_lang from forms import ExpositionForm, PlaceExpositionFormDelete, HallForm, PlaceExpositionFilter -from models import PlaceExposition, Hall +from models import Hall from city.models import City from file.models import FileModel, TmpFile -from file.forms import FileModelForm, FileForm +from file.forms import FileModelForm from photologue.admin import upload_photo from place_conference.models import PlaceConference from place_exposition.models import PlaceExposition @@ -245,19 +245,13 @@ class PlaceExpositionView(AdminView): else: return form_class() - def get_context_data(self, **kwargs): context = super(PlaceExpositionView, self).get_context_data(**kwargs) - obj = self.set_obj() - if obj: - context['file_form'] = FileForm(initial={'model': 'place_exposition.PlaceExposition'}) - files = FileModel.objects.filter(content_type=ContentType.objects.get_for_model(obj),object_id=getattr(obj, 'id')) - context['files'] = files - context['halls'] = list(Hall.objects.language().filter(place_exposition=self.obj)) context['hall_form'] = HallForm() return context + def add_hall(request, place_id): place = get_object_or_404(PlaceExposition, pk=place_id) form = HallForm(request.POST) diff --git a/proj/admin.py b/proj/admin.py index ab30f420..390ea1c1 100644 --- a/proj/admin.py +++ b/proj/admin.py @@ -1,22 +1,19 @@ # -*- coding: utf-8 -*- -import datetime import json from article.models import Article from city.models import City from django.conf import settings from django.contrib.contenttypes.models import ContentType -from django.core.context_processors import csrf from django.db.models.loading import get_model -from django.http import Http404, HttpResponse, HttpResponseRedirect +from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render_to_response -from django.views.generic import DeleteView, TemplateView +from django.views.generic import TemplateView from exposition.forms import StatisticForm, TimeTableForm from exposition.models import Exposition, Statistic, TimeTable, TmpTimeTable -from file.forms import FileForm, FileModelForm, PhotoForm -from file.models import FileModel, Photo, TmpFile -from functions import datetime_handler +from file.forms import PhotoForm +from file.models import Photo, TmpFile from theme.models import Tag @@ -66,81 +63,6 @@ def get_news(request): return HttpResponse(json.dumps(result), content_type='application/json') -''' -def ajax_post_file(request, obj_id=None): - """ - Takes file and file data and save it - If obj_id = None creates TmpFile - - Returns 'file_list.html' template with existing files if id != None. - N/A file_list.html' template with Tmp files filtered by key - """ - if request.POST: - file_form = FileModelForm(request.POST, request.FILES) - if file_form.is_valid(): - #if obj_id is not exist create TMPfile objects else FileModel objects - if obj_id != None: - #takes data from hidden input "model" and initial Model - Model = get_model(request.POST['model'].split('.')[0], request.POST['model'].split('.')[1]) - #initial model object - obj = Model.objects.get(id=obj_id) - file = file_form.save(request.FILES, obj) - - files = FileModel.objects.filter(content_type=ContentType.objects.get_for_model(obj),object_id=getattr(obj, 'id')) - else: - file_form.save(request.FILES) - files = TmpFile.objects.filter(key=request.POST['key']) - - return render_to_response('file_list.html', {'files' : files}) - - args = {} - - args['languages'] = settings.LANGUAGES - args['file_form'] = file_form - return render_to_response('ajax_error_form.html', args) -''' - - -def ajax_post_file(request, obj_id=None): - """ - Takes file and file data and save it - - Returns 'file_list.html' template with existing files if id != None. - - """ - if request.method == 'POST': - if not obj_id: - raise Http404 - file_form = FileForm(request.POST, request.FILES) - if file_form.is_valid(): - # takes data from hidden input "model" and initial Model - Model = get_model(request.POST['model'].split('.')[0], - request.POST['model'].split('.')[1]) - # initial model object - obj = Model.objects.get(id=obj_id) - file_form.save(request.FILES, obj) - - files = FileModel.objects.filter( - content_type=ContentType.objects.get_for_model(obj), - object_id=getattr(obj, 'id') - ) - - return render_to_response( - 'c_admin/file_list.html', {'files': files} - ) - else: - args = { - 'languages': settings.LANGUAGES, - 'file_form': file_form, - 'obj_id': obj_id - } - - args.update(csrf(request)) - return render_to_response('c_admin/ajax_error_form.html', args) - else: - raise Http404 - - def ajax_post_photo(request, obj_id=None): if request.POST: photo_form = PhotoForm(request.POST, request.FILES) @@ -226,15 +148,3 @@ def ajax_delete_timetable(request): else: return HttpResponse('error') - - -def ajax_delete_file(request): - """ - delete file - """ - if request.GET: - file = FileModel.objects.get(id = request.GET['id']) - file.delete() - return HttpResponse('success') - else: - return HttpResponse('error') diff --git a/proj/admin_urls.py b/proj/admin_urls.py index 781f0f13..31489512 100644 --- a/proj/admin_urls.py +++ b/proj/admin_urls.py @@ -42,12 +42,11 @@ urlpatterns = required( url(r'^rosetta/', include('rosetta.urls')), url(r'^redirects/', include('redirects.admin_urls')), url(r'^events/', include('events.admin_urls')), + url(r'^file/', include('file.admin_urls')), url(r'^language/add/', 'directories.admin.language_add'), url(r'^currency/add/', 'directories.admin.currency_add'), # ajax requests - url(r'^ajax_post_file/(?P\d+)/$', 'proj.admin.ajax_post_file'),#must be before /ajax_post_file/ - url(r'^ajax_post_file/', 'proj.admin.ajax_post_file'), url(r'^ajax_post_photo/(?P\d+)/$', 'proj.admin.ajax_post_photo'),#must be before /ajax_post_photo/ url(r'^ajax_post_photo/', 'proj.admin.ajax_post_photo'), url(r'^ajax_post_stat/(?P\d+)/$', 'proj.admin.ajax_post_stat'), @@ -56,7 +55,6 @@ urlpatterns = required( url(r'^ajax_post_timetable/', 'proj.admin.ajax_post_timetable'), url(r'^ajax_delete_timetable/', 'proj.admin.ajax_delete_timetable'), - url(r'^ajax_delete_file/', 'proj.admin.ajax_delete_file'), url(r'^ajax_city/', 'proj.admin.ajax_city'), url(r'^ajax_tag/', 'proj.admin.ajax_tag'), url(r'^ajax/get-news/', 'proj.admin.get_news'), diff --git a/static/jQuery-filer/js/init.js b/static/jQuery-filer/js/init.js index 6d88f60d..5bded9ae 100644 --- a/static/jQuery-filer/js/init.js +++ b/static/jQuery-filer/js/init.js @@ -3,7 +3,7 @@ function init_filer($target) { $.get($target.data('upload-url'), function(response){ var files = []; if (response['success']) { - files = response['images']; + files = response['files']; } $target.find('.file_uploader').filer({ @@ -95,11 +95,19 @@ function init_filer($target) { synchron: true, beforeSend: function() {}, success: function(data, itemEl, listEl, boxEl, newInputEl, inputEl, id){ - var parent = itemEl.find(".jFiler-jProgressBar").parent(); + if (data['success']){ + var parent = itemEl.find(".jFiler-jProgressBar").parent(); + + itemEl.find(".jFiler-jProgressBar").fadeOut("slow", function(){ + $("
Success
").hide().appendTo(parent).fadeIn("slow"); + }); + } else { + var parent = itemEl.find(".jFiler-jProgressBar").parent(); + itemEl.find(".jFiler-jProgressBar").fadeOut("slow", function(){ + $("
Error
").hide().appendTo(parent).fadeIn("slow"); + }); + } - itemEl.find(".jFiler-jProgressBar").fadeOut("slow", function(){ - $("
Success
").hide().appendTo(parent).fadeIn("slow"); - }); }, error: function(el){ var parent = el.find(".jFiler-jProgressBar").parent(); @@ -154,9 +162,11 @@ function init_filer($target) { }); } +$(function(){ + var $uploaders = $('.file_upload_container'); -var $uploaders = $('.file_upload_container'); + $uploaders.each(function (i, uploader) { + init_filer($(uploader)); + }); -$uploaders.each(function (i, uploader) { - init_filer($(uploader)); }); diff --git a/static/jQuery-filer/js/jquery.filer.js b/static/jQuery-filer/js/jquery.filer.js index 331ce4a6..35167aad 100755 --- a/static/jQuery-filer/js/jquery.filer.js +++ b/static/jQuery-filer/js/jquery.filer.js @@ -404,10 +404,6 @@ return f._assets.textParse((opts._appended ? n.templates.itemAppend : n.templates.item), opts); }, renderFile: function(file, html, opts) { - console.log(file); - console.log(html.find('.jFiler-item-trash-action').length); - console.log(opts); - console.log('-------------'); if (file.remove_url){ html.find('.jFiler-item-trash-action').attr('href', file.remove_url) } @@ -440,7 +436,6 @@ return true; } if (window.File && window.FileList && window.FileReader && opts.type == "image" && opts.size < 1e+7) { - console.log('renderFile third if'); var y = new FileReader; y.onload = function(e) { var m = html.find('.jFiler-item-thumb-image.fi-loading'); @@ -492,7 +487,6 @@ }; y.readAsDataURL(file); } else { - console.log('renderFile else'); var g = f._thumbCreator.generateIcon(opts), m = html.find('.jFiler-item-thumb-image.fi-loading'); html.addClass('jFiler-no-thumbnail'); diff --git a/templates/c_admin/article/blog_form.html b/templates/c_admin/article/blog_form.html index a4aaef90..e1c2366c 100644 --- a/templates/c_admin/article/blog_form.html +++ b/templates/c_admin/article/blog_form.html @@ -1,34 +1,34 @@ {% extends 'base.html' %} -{% load static %} -{% load i18n %} -{# Displays article form #} - - {% block scripts %} - - - {# selects #} - - - {# ajax #} - - - - - - - - - {% endblock %} +{% load static i18n %} + +{% block scripts %} + + {# selects #} + + + {# ajax #} + + + + + + + + + + + + +{% endblock %} {% block body %} {{ form.errors }} @@ -132,38 +132,9 @@ -
-
-

{% trans "Файлы" %}

-
-
- {% if article %} - {# button that shows modal window with file form #} - {% trans "Добавить файл" %} - {% else %} -

{% trans "Файлы можно добавлять только после введения основных данных" %}

- {% endif %} - {# this div shows list of files and refreshes when new file added #} -
- - - - - - - - - - - - {% include 'file_list.html' with files=files %} - -
{% trans "id" %}{% trans "Файл" %}{% trans "Имя" %}{% trans "Назначение" %}
-
+ {% include 'c_admin/includes/filegallery.html' with object=article model='article.Article' %} -
-
{% if form.draft %}
@@ -183,7 +154,6 @@ -{% include 'c_admin/includes/file_form.html' with file_form=file_form object=article %} {% endblock %} diff --git a/templates/c_admin/conference/conference.html b/templates/c_admin/conference/conference.html index c5d5ab6a..94b9543f 100644 --- a/templates/c_admin/conference/conference.html +++ b/templates/c_admin/conference/conference.html @@ -24,102 +24,90 @@ } {% endblock %} -{# Displays exposition form and file form in modal window #} - - {% block scripts %} - - - - {# selects #} - - - {# datepicker #} - - - - - - - - - - {# datetimepicker #} - - - + + {# selects #} + + + {# datepicker #} + + + + + + + + {# datetimepicker #} + + + + }); + - {% endblock %} + + + + +{% endblock %} {% block body %}
{% csrf_token %} @@ -509,39 +497,8 @@ {% endif %}
-
-
-

Файлы

-
-
- {% if object %} - {# button that shows modal window with file form #} - Добавить файл - {% else %} -

Файлы можно добавлять только после введения основных данных

- {% endif %} - {# this div shows list of files and refreshes when new file added #} -
- - - - - - - - - - - - - {% include 'file_list.html' with files=files %} - -
idФайлИмяНазначение
-
- -
-
+ {% include 'c_admin/includes/filegallery.html' with object=object model='conference.Conference' %} {% include 'c_admin/includes/photogallery.html' with object=object %}
@@ -574,6 +531,5 @@ -{% include 'c_admin/includes/file_form.html' with file_form=file_form object=object %} {% include 'c_admin/includes/stat_form.html' with form=stat_form object=object %} {% endblock %} diff --git a/templates/c_admin/exposition/exposition.html b/templates/c_admin/exposition/exposition.html index 169cf2dd..bb0d0fb6 100644 --- a/templates/c_admin/exposition/exposition.html +++ b/templates/c_admin/exposition/exposition.html @@ -1,4 +1,4 @@ -{% extends 'base.html' %} +{% extends 'c_admin/base.html' %} {% load static %} {% load thumbnail %} @@ -13,52 +13,51 @@ } {% endblock %} -{# Displays exposition form and file form in modal window #} - - {% block scripts %} - - - - {# selects #} - - - - - - - + + {# selects #} + + + + + - {% endblock %} + }); + + + + + + +{% endblock %} {% block body %} @@ -494,42 +493,10 @@
{% endif %}
-
-
-

Файлы

-
-
- {% if object %} - {# button that shows modal window with file form #} - Добавить файл - {% else %} -

Файлы можно добавлять только после введения основных данных

- {% endif %} - {# this div shows list of files and refreshes when new file added #} -
- - - - - - - - - - - - - {% include 'file_list.html' with files=files %} - -
idФайлИмяНазначение
-
- -
-
+ {% include 'c_admin/includes/filegallery.html' with object=object model='exposition.Exposition' %} {% include 'c_admin/includes/photogallery.html' with object=object %} -

Мета данные

@@ -590,14 +557,13 @@ {% with field='place' form=timetable_form languages=languages %} {% include 'c_admin/forms/multilang.html' %} {% endwith %} - + +{#
#} +{# #} +{#
#} +{# {{ timetable_form.timetable_organiser }}#} +{#
#} +{#
#}
@@ -614,6 +580,5 @@ -{% include 'c_admin/includes/file_form.html' with file_form=file_form object=object %} {% include 'c_admin/includes/stat_form.html' with form=stat_form object=object %} {% endblock %} diff --git a/templates/c_admin/file/file_update.html b/templates/c_admin/file/file_update.html new file mode 100644 index 00000000..5b67905e --- /dev/null +++ b/templates/c_admin/file/file_update.html @@ -0,0 +1,26 @@ +{% extends 'c_admin/base.html' %} + +{% block body %} +
+
+ {% if object %} Изменить {% else %} Добавить {% endif %} файл + +
+
+

Основная информация

+
+
+ {{ form.as_p }} +
+ + + +
+
+
+{% endblock %} diff --git a/templates/c_admin/file_list.html b/templates/c_admin/file_list.html deleted file mode 100644 index 3745ac81..00000000 --- a/templates/c_admin/file_list.html +++ /dev/null @@ -1,25 +0,0 @@ -{% load thumbnail %} -{% comment %} -Uses in ajax call - -Returns table with files properties - -{% endcomment %} - {% for file in files %} - - {{ file.id }} - - {% thumbnail file.file_path "100x100" crop="center" as im %} - - {% endthumbnail %} - - {{ file.file_name }} - {{ file.purpose }} - - - - - - {% endfor %} diff --git a/templates/c_admin/includes/file_form.html b/templates/c_admin/includes/file_form.html deleted file mode 100644 index 39c36877..00000000 --- a/templates/c_admin/includes/file_form.html +++ /dev/null @@ -1,49 +0,0 @@ - diff --git a/templates/c_admin/includes/filegallery.html b/templates/c_admin/includes/filegallery.html new file mode 100644 index 00000000..f0e3b911 --- /dev/null +++ b/templates/c_admin/includes/filegallery.html @@ -0,0 +1,19 @@ +{% load static %} +
+
+

Файлы

+
+ +
+ {% if object %} +
+ + +
+ {% else %} +

Файлы можно добавлять только после введения основных данных

+ {% endif %} +
+
+ diff --git a/templates/c_admin/includes/photogallery.html b/templates/c_admin/includes/photogallery.html index 6563b1b4..f0d261ed 100644 --- a/templates/c_admin/includes/photogallery.html +++ b/templates/c_admin/includes/photogallery.html @@ -11,12 +11,6 @@ - - - - - - {% else %}

Изображения можно добавлять только после введения основных данных

{% endif %} diff --git a/templates/c_admin/place_conference/place_conference.html b/templates/c_admin/place_conference/place_conference.html index d3c7d33f..b2c2ddc9 100644 --- a/templates/c_admin/place_conference/place_conference.html +++ b/templates/c_admin/place_conference/place_conference.html @@ -12,7 +12,6 @@ {% endblock %} {% block scripts %} - {# google map не забыть скачать скрипты на локал #} @@ -28,6 +27,10 @@ + + + + {% endblock %} {% block body %} @@ -263,39 +266,7 @@ -
-
-

Файлы

-
-
- {% if object %} - {# button that shows modal window with file form #} - Добавить файл - {% else %} -

Файлы можно добавлять только после введения основных данных

- {% endif %} - {# this div shows list of files and refreshes when new file added #} -
- - - - - - - - - - - - - {% include 'file_list.html' with files=files %} - -
idФайлИмяНазначение
-
- -
-
- + {% include 'c_admin/includes/filegallery.html' with object=object model='place_conference.PlaceConference' %} {% include 'c_admin/includes/photogallery.html' with object=object %}
@@ -333,6 +304,5 @@ {% include 'c_admin/includes/hall_form.html' with form=hall_form object=object %} -{% include 'c_admin/includes/file_form.html' with file_form=file_form object=object %} {% endblock %} diff --git a/templates/c_admin/place_exposition/place_exposition.html b/templates/c_admin/place_exposition/place_exposition.html index ca08d987..59fd8060 100644 --- a/templates/c_admin/place_exposition/place_exposition.html +++ b/templates/c_admin/place_exposition/place_exposition.html @@ -1,5 +1,6 @@ {% extends 'base.html' %} {% load static %} + {% block styles %} .hover{ display:none; @@ -12,7 +13,6 @@ {% endblock %} {% block scripts %} - {# google map не забыть скачать скрипты на локал #} @@ -28,6 +28,10 @@ + + + + {% endblock %} {% block body %} @@ -323,39 +327,7 @@
-
-
-

Файлы

-
-
- {% if object %} - {# button that shows modal window with file form #} - Добавить файл - {% else %} -

Файлы можно добавлять только после введения основных данных

- {% endif %} - {# this div shows list of files and refreshes when new file added #} -
- - - - - - - - - - - - - {% include 'file_list.html' with files=files %} - -
idФайлИмяНазначение
-
- -
-
- + {% include 'c_admin/includes/filegallery.html' with object=object model='place_exposition.PlaceExposition' %} {% include 'c_admin/includes/photogallery.html' with object=object %}
@@ -393,6 +365,5 @@ {% include 'c_admin/includes/hall_form.html' with form=hall_form object=object %} -{% include 'c_admin/includes/file_form.html' with file_form=file_form object=object %} {% endblock %}