мультизагрузка файлов в админ панели

remotes/origin/tests
Slava Kyrachevsky 9 years ago
parent 257dd6e2de
commit a330b278af
  1. 12
      apps/article/admin.py
  2. 6
      apps/conference/admin.py
  3. 5
      apps/exposition/admin.py
  4. 75
      apps/file/admin.py
  5. 29
      apps/file/admin_urls.py
  6. 34
      apps/file/forms.py
  7. 620
      apps/file/migrations/0001_initial.py
  8. 0
      apps/file/migrations/__init__.py
  9. 29
      apps/file/models.py
  10. 2
      apps/photologue/admin.py
  11. 12
      apps/place_conference/admin.py
  12. 12
      apps/place_exposition/admin.py
  13. 98
      proj/admin.py
  14. 4
      proj/admin_urls.py
  15. 26
      static/jQuery-filer/js/init.js
  16. 6
      static/jQuery-filer/js/jquery.filer.js
  17. 92
      templates/c_admin/article/blog_form.html
  18. 204
      templates/c_admin/conference/conference.html
  19. 133
      templates/c_admin/exposition/exposition.html
  20. 26
      templates/c_admin/file/file_update.html
  21. 25
      templates/c_admin/file_list.html
  22. 49
      templates/c_admin/includes/file_form.html
  23. 19
      templates/c_admin/includes/filegallery.html
  24. 6
      templates/c_admin/includes/photogallery.html
  25. 40
      templates/c_admin/place_conference/place_conference.html
  26. 41
      templates/c_admin/place_exposition/place_exposition.html

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.shortcuts import render_to_response, get_object_or_404 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.db import models
from django.core.context_processors import csrf from django.core.context_processors import csrf
from django.conf import settings 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.auth.decorators import login_required
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.views.generic import DeleteView from django.views.generic import DeleteView
from django.utils.translation import ugettext_lazy as _
from modeltranslation.admin import TabbedTranslationAdmin from modeltranslation.admin import TabbedTranslationAdmin
from ckeditor.widgets import CKEditorWidget from ckeditor.widgets import CKEditorWidget
@ -19,8 +18,8 @@ from .forms import ArticleForm, ArticleDeleteForm, NewsForm
from .models import Article, Author from .models import Article, Author
from theme.models import Tag from theme.models import Tag
from file.models import FileModel, TmpFile from file.models import FileModel
from file.forms import FileModelForm, FileForm from file.forms import FileModelForm
#custom views #custom views
from functions.custom_views import objects_list, add_object_with_file, delete_object 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): def get_context_data(self, **kwargs):
context = super(BlogView, self).get_context_data(**kwargs) context = super(BlogView, self).get_context_data(**kwargs)
self.set_obj() self.set_obj()
context['article'] = self.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 context['languages'] = settings.LANGUAGES
return context return context

@ -23,7 +23,7 @@ from sorl.thumbnail.admin.current import AdminImageWidget
from exposition.admin import get_by_lang from exposition.admin import get_by_lang
from city.models import City from city.models import City
from file.forms import FileForm, FileModelForm from file.forms import FileModelForm
from file.models import FileModel, TmpFile from file.models import FileModel, TmpFile
from forms import ( from forms import (
ConferenceChangeForm, ConferenceChangeForm,
@ -329,11 +329,7 @@ class ConferenceView(AdminView):
context = super(ConferenceView, self).get_context_data(**kwargs) context = super(ConferenceView, self).get_context_data(**kwargs)
obj = self.set_obj() obj = self.set_obj()
if obj: if obj:
context['stat_form'] = StatisticForm() 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['timetable_form'] = TimeTableForm()
context['timetables'] = TimeTable.objects.filter(conference=obj) context['timetables'] = TimeTable.objects.filter(conference=obj)

@ -14,7 +14,7 @@ from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.utils import translation from django.utils import translation
from django.views.decorators.csrf import csrf_exempt 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 file.models import FileModel, TmpFile
from forms import ( from forms import (
ExpositionCreateForm, ExpositionCreateForm,
@ -331,9 +331,6 @@ class ExpositionView(AdminView):
obj = self.set_obj() obj = self.set_obj()
if obj: if obj:
context['stat_form'] = StatisticForm() 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['timetable_form'] = TimeTableForm()
context['timetables'] = TimeTable.objects.filter(exposition=obj) context['timetables'] = TimeTable.objects.filter(exposition=obj)

@ -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

@ -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<obj_id>\d+)/$',
'file.admin.ajax_post_file',
name='ajax_post_file'
),
url(
r'^ajax_delete_file/(?P<id>\d+)/',
'file.admin.ajax_delete_file',
name='ajax_delete_file'
),
url(
r'^update/(?P<pk>\d+)/',
FileUpdateView.as_view(),
name='file_update'
),
)
)

@ -5,7 +5,7 @@ from django.contrib.contenttypes.models import ContentType
from ckeditor.widgets import CKEditorWidget from ckeditor.widgets import CKEditorWidget
#models #models
from country.models import Country from country.models import Country
from models import FileModel, TmpFile, IMG_TYPES, PURPOSES, Photo from .models import FileModel, TmpFile, IMG_TYPES, PURPOSES, Photo
#functions #functions
from functions.translate import populate, fill_trans_fields_all from functions.translate import populate, fill_trans_fields_all
#python #python
@ -17,8 +17,11 @@ from django.utils.translation import ugettext as _
class FileForm(forms.Form): class FileForm(forms.Form):
file_path = forms.FileField(label=_(u'Выберите файл')) file_path = forms.FileField(label=_(u'Выберите файл'))
model = forms.CharField(required=False, widget=forms.HiddenInput()) model = forms.CharField(required=False, widget=forms.HiddenInput())
purposes = [('scheme teritory',_(u'Схема территории')),('preview',_(u'Превью')), ('preview2',_(u'Превью2'))] purpose = forms.ChoiceField(
purpose = forms.ChoiceField(label=_(u'Назначение'), choices=purposes) label=_(u'Назначение'),
choices=PURPOSES,
required=False
)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
@ -30,10 +33,8 @@ class FileForm(forms.Form):
if len(settings.LANGUAGES) in range(10): if len(settings.LANGUAGES) in range(10):
for lid, (code, name) in enumerate(settings.LANGUAGES): for lid, (code, name) in enumerate(settings.LANGUAGES):
# using enumerate for detect iteration number # using enumerate for detect iteration number
# first iteration is a default lang so it required fields self.fields['file_name_%s' % code] = forms.CharField(label=_(u'Имя файла'), required=False, widget=forms.TextInput(attrs={'placeholder': 'Имя'}))
required = True if lid == 0 else False 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): def save(self, request, obj=None):
""" """
@ -59,7 +60,10 @@ class FileForm(forms.Form):
#------- #-------
file_obj.file_path = request['file_path'] 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 of file
type = str(data['file_path']).split('.')[-1] type = str(data['file_path']).split('.')[-1]
#if type is image save fields with image size #if type is image save fields with image size
@ -79,6 +83,16 @@ class FileForm(forms.Form):
return file_obj return file_obj
class FileUpdateForm(forms.ModelForm):
"""
Форма обновления файла в админ панели
"""
class Meta:
model = FileModel
fields = ('file_path',)
class FileModelForm(forms.Form): class FileModelForm(forms.Form):
""" """
Create FileModel form Create FileModel form
@ -92,8 +106,7 @@ class FileModelForm(forms.Form):
key = forms.CharField(required=False, widget=forms.HiddenInput()) key = forms.CharField(required=False, widget=forms.HiddenInput())
model = 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): def __init__(self, *args, **kwargs):
""" """
@ -167,6 +180,7 @@ class FileModelForm(forms.Form):
return file_obj return file_obj
class PhotoForm(forms.Form): class PhotoForm(forms.Form):
file_path = forms.FileField(label=_(u'Выберите файл')) file_path = forms.FileField(label=_(u'Выберите файл'))
# uses for comparing with TmpFile key # uses for comparing with TmpFile key

@ -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']

@ -14,15 +14,16 @@ import os
FILE_TYPES = ('PDF', 'DOC', 'TXT', 'OTHER') FILE_TYPES = ('PDF', 'DOC', 'TXT', 'OTHER')
IMG_TYPES = ('JPG', 'BMP', 'PNG', 'GIF',) IMG_TYPES = ('JPG', 'BMP', 'PNG', 'GIF',)
PURPOSES = (('photo', _(u'Фото')), PURPOSES = (
('flat', _(u'Флаг')), ('photo', _(u'Фото')),
('logo',_(u'Лого')), ('flat', _(u'Флаг')),
('map',_(u'Карта')), ('logo', _(u'Лого')),
('scheme teritory',_(u'Схема територии')), ('map', _(u'Карта')),
('diplom',_(u'Дипломы')), ('scheme teritory', _(u'Схема територии')),
('preview',_(u'Превью')), ('diplom', _(u'Дипломы')),
('preview2',_(u'Превью')), ('preview', _(u'Превью')),
) ('preview2', _(u'Превью')),
)
class FileModel(TranslatableModel): class FileModel(TranslatableModel):
@ -52,10 +53,12 @@ class FileModel(TranslatableModel):
object_id = models.PositiveIntegerField(blank=True, null=True) object_id = models.PositiveIntegerField(blank=True, null=True)
object = generic.GenericForeignKey(content_type, object_id) 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 and purposes uses EnumField for creating Enum type field in Mysql database
file_type = EnumField(values=FILE_TYPES+IMG_TYPES, blank=True) 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_width = models.PositiveIntegerField(blank=True, null=True)
img_height = 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) modified = models.DateTimeField(auto_now=True)
# translations is translated fields # translations is translated fields
translations = TranslatedFields( translations = TranslatedFields(
file_name = models.CharField(max_length=50, blank=True), file_name=models.CharField(max_length=50, blank=True),
description = models.TextField(blank=True), description=models.TextField(blank=True),
) )

@ -157,7 +157,7 @@ def upload_photo(request, id, Model):
elif request.is_ajax() and request.method == 'GET': elif request.is_ajax() and request.method == 'GET':
data['success'] = True data['success'] = True
data['images'] = get_images_list(obj) data['files'] = get_images_list(obj)
return HttpResponse(json.dumps(data), content_type='application/json') return HttpResponse(json.dumps(data), content_type='application/json')

@ -21,6 +21,7 @@ import random
from functions.custom_views import objects_list, delete_object from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer from functions.views_help import get_referer
from functions.admin_views import AdminListView from functions.admin_views import AdminListView
from functions.admin_views import AdminView
def conference_all(request): def conference_all(request):
@ -189,8 +190,6 @@ def conference_change(request, url):
return render_to_response('place_conference_add.html', args) return render_to_response('place_conference_add.html', args)
from functions.admin_views import AdminView
from file.forms import FileModelForm, FileForm
class PlaceConferenceView(AdminView): class PlaceConferenceView(AdminView):
form_class = ConferenceForm form_class = ConferenceForm
model = PlaceConference model = PlaceConference
@ -233,15 +232,6 @@ class PlaceConferenceView(AdminView):
return form_class() 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): class PlaceConferenceListView(AdminListView):
template_name = 'c_admin/place_conference/place_conference_list.html' template_name = 'c_admin/place_conference/place_conference_list.html'
form_class = PlaceConferenceFilterForm form_class = PlaceConferenceFilterForm

@ -21,10 +21,10 @@ from functions.http import JsonResponse
from exposition.admin import get_by_lang from exposition.admin import get_by_lang
from forms import ExpositionForm, PlaceExpositionFormDelete, HallForm, PlaceExpositionFilter from forms import ExpositionForm, PlaceExpositionFormDelete, HallForm, PlaceExpositionFilter
from models import PlaceExposition, Hall from models import Hall
from city.models import City from city.models import City
from file.models import FileModel, TmpFile from file.models import FileModel, TmpFile
from file.forms import FileModelForm, FileForm from file.forms import FileModelForm
from photologue.admin import upload_photo from photologue.admin import upload_photo
from place_conference.models import PlaceConference from place_conference.models import PlaceConference
from place_exposition.models import PlaceExposition from place_exposition.models import PlaceExposition
@ -245,19 +245,13 @@ class PlaceExpositionView(AdminView):
else: else:
return form_class() return form_class()
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(PlaceExpositionView, self).get_context_data(**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['halls'] = list(Hall.objects.language().filter(place_exposition=self.obj))
context['hall_form'] = HallForm() context['hall_form'] = HallForm()
return context return context
def add_hall(request, place_id): def add_hall(request, place_id):
place = get_object_or_404(PlaceExposition, pk=place_id) place = get_object_or_404(PlaceExposition, pk=place_id)
form = HallForm(request.POST) form = HallForm(request.POST)

@ -1,22 +1,19 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import datetime
import json import json
from article.models import Article from article.models import Article
from city.models import City from city.models import City
from django.conf import settings from django.conf import settings
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.context_processors import csrf
from django.db.models.loading import get_model 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.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.forms import StatisticForm, TimeTableForm
from exposition.models import Exposition, Statistic, TimeTable, TmpTimeTable from exposition.models import Exposition, Statistic, TimeTable, TmpTimeTable
from file.forms import FileForm, FileModelForm, PhotoForm from file.forms import PhotoForm
from file.models import FileModel, Photo, TmpFile from file.models import Photo, TmpFile
from functions import datetime_handler
from theme.models import Tag from theme.models import Tag
@ -66,81 +63,6 @@ def get_news(request):
return HttpResponse(json.dumps(result), content_type='application/json') 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): def ajax_post_photo(request, obj_id=None):
if request.POST: if request.POST:
photo_form = PhotoForm(request.POST, request.FILES) photo_form = PhotoForm(request.POST, request.FILES)
@ -226,15 +148,3 @@ def ajax_delete_timetable(request):
else: else:
return HttpResponse('error') 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')

@ -42,12 +42,11 @@ urlpatterns = required(
url(r'^rosetta/', include('rosetta.urls')), url(r'^rosetta/', include('rosetta.urls')),
url(r'^redirects/', include('redirects.admin_urls')), url(r'^redirects/', include('redirects.admin_urls')),
url(r'^events/', include('events.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'^language/add/', 'directories.admin.language_add'),
url(r'^currency/add/', 'directories.admin.currency_add'), url(r'^currency/add/', 'directories.admin.currency_add'),
# ajax requests # ajax requests
url(r'^ajax_post_file/(?P<obj_id>\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<obj_id>\d+)/$', 'proj.admin.ajax_post_photo'),#must be before /ajax_post_photo/ url(r'^ajax_post_photo/(?P<obj_id>\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_photo/', 'proj.admin.ajax_post_photo'),
url(r'^ajax_post_stat/(?P<obj_id>\d+)/$', 'proj.admin.ajax_post_stat'), url(r'^ajax_post_stat/(?P<obj_id>\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_post_timetable/', 'proj.admin.ajax_post_timetable'),
url(r'^ajax_delete_timetable/', 'proj.admin.ajax_delete_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_city/', 'proj.admin.ajax_city'),
url(r'^ajax_tag/', 'proj.admin.ajax_tag'), url(r'^ajax_tag/', 'proj.admin.ajax_tag'),
url(r'^ajax/get-news/', 'proj.admin.get_news'), url(r'^ajax/get-news/', 'proj.admin.get_news'),

@ -3,7 +3,7 @@ function init_filer($target) {
$.get($target.data('upload-url'), function(response){ $.get($target.data('upload-url'), function(response){
var files = []; var files = [];
if (response['success']) { if (response['success']) {
files = response['images']; files = response['files'];
} }
$target.find('.file_uploader').filer({ $target.find('.file_uploader').filer({
@ -95,11 +95,19 @@ function init_filer($target) {
synchron: true, synchron: true,
beforeSend: function() {}, beforeSend: function() {},
success: function(data, itemEl, listEl, boxEl, newInputEl, inputEl, id){ 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(){
$("<div class=\"jFiler-item-others text-success\"><i class=\"icon-jfi-check-circle\"></i> Success</div>").hide().appendTo(parent).fadeIn("slow");
});
} else {
var parent = itemEl.find(".jFiler-jProgressBar").parent();
itemEl.find(".jFiler-jProgressBar").fadeOut("slow", function(){
$("<div class=\"jFiler-item-others text-error\"><i class=\"icon-jfi-minus-circle\"></i> Error</div>").hide().appendTo(parent).fadeIn("slow");
});
}
itemEl.find(".jFiler-jProgressBar").fadeOut("slow", function(){
$("<div class=\"jFiler-item-others text-success\"><i class=\"icon-jfi-check-circle\"></i> Success</div>").hide().appendTo(parent).fadeIn("slow");
});
}, },
error: function(el){ error: function(el){
var parent = el.find(".jFiler-jProgressBar").parent(); 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));
}); });

@ -404,10 +404,6 @@
return f._assets.textParse((opts._appended ? n.templates.itemAppend : n.templates.item), opts); return f._assets.textParse((opts._appended ? n.templates.itemAppend : n.templates.item), opts);
}, },
renderFile: function(file, html, 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){ if (file.remove_url){
html.find('.jFiler-item-trash-action').attr('href', file.remove_url) html.find('.jFiler-item-trash-action').attr('href', file.remove_url)
} }
@ -440,7 +436,6 @@
return true; return true;
} }
if (window.File && window.FileList && window.FileReader && opts.type == "image" && opts.size < 1e+7) { if (window.File && window.FileList && window.FileReader && opts.type == "image" && opts.size < 1e+7) {
console.log('renderFile third if');
var y = new FileReader; var y = new FileReader;
y.onload = function(e) { y.onload = function(e) {
var m = html.find('.jFiler-item-thumb-image.fi-loading'); var m = html.find('.jFiler-item-thumb-image.fi-loading');
@ -492,7 +487,6 @@
}; };
y.readAsDataURL(file); y.readAsDataURL(file);
} else { } else {
console.log('renderFile else');
var g = f._thumbCreator.generateIcon(opts), var g = f._thumbCreator.generateIcon(opts),
m = html.find('.jFiler-item-thumb-image.fi-loading'); m = html.find('.jFiler-item-thumb-image.fi-loading');
html.addClass('jFiler-no-thumbnail'); html.addClass('jFiler-no-thumbnail');

@ -1,34 +1,34 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static i18n %}
{% load i18n %}
{# Displays article form #} {% block scripts %}
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script>
{% block scripts %} {# selects #}
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script> <script src="{% static 'js/select/select2.js' %}"></script>
{# selects #} {# ajax #}
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/> <script src="{% static 'custom_js/file_post_ajax.js' %}"></script>
<script src="{% static 'js/select/select2.js' %}"></script> <script src="{% static 'custom_js/select_tag.js' %}"></script>
{# ajax #}
<script src="{% static 'custom_js/file_post_ajax.js' %}"></script>
<script src="{% static 'custom_js/select_tag.js' %}"></script> <link href="{% static 'js/datetimepicker/css/datetimepicker.css' %}" rel="stylesheet"/>
<script src="{% static 'js/datetimepicker/js/bootstrap-datetimepicker.js' %}"></script>
<script>
<link href="{% static 'js/datetimepicker/css/datetimepicker.css' %}" rel="stylesheet"/> $(document).ready(function(){
<script src="{% static 'js/datetimepicker/js/bootstrap-datetimepicker.js' %}"></script> $('#id_publish_date').datetimepicker({
<script> todayHighlight: true,
$(document).ready(function(){ format : 'yyyy-mm-dd',
$('#id_publish_date').datetimepicker({ minView:2
todayHighlight: true, });
format : 'yyyy-mm-dd',
minView:2 });
}); </script>
}); <link rel="stylesheet" href="{% static 'jQuery-filer/css/jquery.filer.css' %}">
<link rel="stylesheet" href="{% static 'jQuery-filer/css/jquery.filer-dragdropbox-theme.css' %}">
</script> <script src="{% static 'jQuery-filer/js/jquery.filer.js' %}"></script>
<script src="{% static 'jQuery-filer/js/init.js' %}"></script>
{% endblock %} {% endblock %}
{% block body %} {% block body %}
{{ form.errors }} {{ form.errors }}
@ -132,38 +132,9 @@
</div> </div>
</div> </div>
<div class="box span8" id="file">
<div class="box-header well">
<h2><i class="icon-pencil"></i> {% trans "Файлы" %}</h2>
</div>
<div class="box-content">
{% if article %}
{# button that shows modal window with file form #}
<a href="#myModal" id="file_add" role="button" class="btn btn-info" data-toggle="modal">{% trans "Добавить файл" %}</a>
{% else %}
<p>{% trans "Файлы можно добавлять только после введения основных данных" %}</p>
{% endif %}
{# this div shows list of files and refreshes when new file added #}
<div id="file_list">
<table class="table table-hover">
<thead> {% include 'c_admin/includes/filegallery.html' with object=article model='article.Article' %}
<tr>
<td>{% trans "id" %}</td>
<td>{% trans "Файл" %}</td>
<td>{% trans "Имя" %}</td>
<td>{% trans "Назначение" %}</td>
<td></td>
</tr>
</thead>
<tbody>
{% include 'file_list.html' with files=files %}
</tbody>
</table>
</div>
</div>
</div>
{% if form.draft %} {% if form.draft %}
<div class="box span8"> <div class="box span8">
<div class="control-group {% if form.draft.errors %}error{% endif %}"> <div class="control-group {% if form.draft.errors %}error{% endif %}">
@ -183,7 +154,6 @@
</fieldset> </fieldset>
</form> </form>
{% include 'c_admin/includes/file_form.html' with file_form=file_form object=article %}
{% endblock %} {% endblock %}

@ -24,102 +24,90 @@
} }
{% endblock %} {% endblock %}
{# Displays exposition form and file form in modal window #} {% block scripts %}
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script>
{% block scripts %} <script src="{% static 'tiny_mce/tiny_mce.js' %}"></script>
{# selects #}
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script> <link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>
<script src="{% static 'tiny_mce/tiny_mce.js' %}"></script> <script src="{% static 'js/select/select2.js' %}"></script>
{# selects #} {# datepicker #}
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>
<script src="{% static 'js/select/select2.js' %}"></script> <link href="{% static 'js/datepicker/css/datepicker.css' %}" rel="stylesheet"/>
{# datepicker #} <script src="{% static 'js/datepicker/js/bootstrap-datepicker.js' %}"></script>
<link href="{% static 'js/datepicker/css/datepicker.css' %}" rel="stylesheet"/> <script src="{% static 'custom_js/formset_add.js' %}"></script>
<script src="{% static 'js/datepicker/js/bootstrap-datepicker.js' %}"></script> <!--
{# ajax #}
<script src="{% static 'custom_js/formset_add.js' %}"></script> <script src="{% static 'custom_js/timetable_post.js' %}"></script>
<!-- <script src="{% static 'custom_js/place_city_ajax.js' %}"></script>
{# ajax #} <script src="{% static 'custom_js/select_tag.js' %}"></script>
-->
<script src="{% static 'custom_js/timetable_post.js' %}"></script> {# datetimepicker #}
<script src="{% static 'custom_js/place_city_ajax.js' %}"></script> <link href="{% static 'js/datetimepicker/css/datetimepicker.css' %}" rel="stylesheet"/>
<script src="{% static 'custom_js/select_tag.js' %}"></script> <script src="{% static 'js/datetimepicker/js/bootstrap-datetimepicker.js' %}"></script>
--> <script type="text/javascript">
$(document).ready(function(){
{# datetimepicker #} $('#id_data_begin').datetimepicker({
<link href="{% static 'js/datetimepicker/css/datetimepicker.css' %}" rel="stylesheet"/> todayHighlight: true,
<script src="{% static 'js/datetimepicker/js/bootstrap-datetimepicker.js' %}"></script> format : 'dd.mm.yyyy',
<script type="text/javascript"> minView:2
$(document).ready(function(){ });
$('#id_data_begin').datetimepicker({ $('#id_data_end').datetimepicker({
todayHighlight: true, todayHighlight: true,
format : 'dd.mm.yyyy', format : 'dd.mm.yyyy',
minView:2 minView:2
}); });
$('#id_data_end').datetimepicker({ $('#id_end').datetimepicker({
todayHighlight: true, todayHighlight: true,
format : 'dd.mm.yyyy', format : 'dd.mm.yyyy hh:ii'
minView:2
}); });
$('#id_end').datetimepicker({ $('#id_begin').datetimepicker({
todayHighlight: true, todayHighlight: true,
format : 'dd.mm.yyyy hh:ii' format : 'dd.mm.yyyy hh:ii'
}); });
$('#id_begin').datetimepicker({
todayHighlight: true, $('#id_application_deadline').datetimepicker({
format : 'dd.mm.yyyy hh:ii' todayHighlight: true,
format : 'dd.mm.yyyy',
}); minView:2
});
$('#id_application_deadline').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy',
minView:2
});
$('#id_audience').select4({
tags: false,
multiple: true,
ajax: {
url: '{% url 'admin:events_targetaudience_searchajax' %}',
width: '550px',
dataType: "json",
quietMillis: 200,
data: function(params){
return {term: params.term,
page: params.page};
},
processResults: function (data) {
return {results: $.map(data, function(obj) {
obj.text = obj.label;
return obj
})};
},
$('#id_audience').select4({
tags: false,
multiple: true,
ajax: {
url: '{% url 'admin:events_targetaudience_searchajax' %}',
width: '550px',
dataType: "json",
quietMillis: 200,
data: function(params){
return {term: params.term,
page: params.page};
}, },
{# createTag: function(params) {#} processResults: function (data) {
{# return undefined;#} return {results: $.map(data, function(obj) {
{# },#} obj.text = obj.label;
}); return obj
{##} })};
{# $('#id_tag, #id_theme, #id_city, #id_country, #id_place_conference').on('select2-open', function () {#} },
{# $('#id_audience').prop("disabled", true);#}
{# });#} },
{# $('#id_tag, #id_theme, #id_city, #id_country, #id_place_conference').on('select2-close', function () {#}
{# $('#id_audience').prop("disabled", false);#}
{# });#}
}); });
</script> });
</script>
{% endblock %} <link rel="stylesheet" href="{% static 'jQuery-filer/css/jquery.filer.css' %}">
<link rel="stylesheet" href="{% static 'jQuery-filer/css/jquery.filer-dragdropbox-theme.css' %}">
<script src="{% static 'jQuery-filer/js/jquery.filer.js' %}"></script>
<script src="{% static 'jQuery-filer/js/init.js' %}"></script>
{% endblock %}
{% block body %} {% block body %}
<form method="post" class="form-horizontal" enctype="multipart/form-data" name="form1" id="form1"> {% csrf_token %} <form method="post" class="form-horizontal" enctype="multipart/form-data" name="form1" id="form1"> {% csrf_token %}
@ -509,39 +497,8 @@
{% endif %} {% endif %}
</div> </div>
<div class="box span8" id="file">
<div class="box-header well">
<h2><i class="icon-pencil"></i> Файлы</h2>
</div>
<div class="box-content">
{% if object %}
{# button that shows modal window with file form #}
<a href="#myModal" id="file_add" role="button" class="btn btn-info" data-toggle="modal">Добавить файл</a>
{% else %}
<p>Файлы можно добавлять только после введения основных данных</p>
{% endif %}
{# this div shows list of files and refreshes when new file added #}
<div id="file_list">
<table class="table table-hover">
<thead>
<tr>
<td>id</td>
<td>Файл</td>
<td>Имя</td>
<td>Назначение</td>
<td></td>
</tr>
</thead>
<tbody>
{% include 'file_list.html' with files=files %}
</tbody>
</table>
</div>
</div>
</div>
{% include 'c_admin/includes/filegallery.html' with object=object model='conference.Conference' %}
{% include 'c_admin/includes/photogallery.html' with object=object %} {% include 'c_admin/includes/photogallery.html' with object=object %}
<div class="box span8"> <div class="box span8">
@ -574,6 +531,5 @@
</form> </form>
{% 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 %} {% include 'c_admin/includes/stat_form.html' with form=stat_form object=object %}
{% endblock %} {% endblock %}

@ -1,4 +1,4 @@
{% extends 'base.html' %} {% extends 'c_admin/base.html' %}
{% load static %} {% load static %}
{% load thumbnail %} {% load thumbnail %}
@ -13,52 +13,51 @@
} }
{% endblock %} {% endblock %}
{# Displays exposition form and file form in modal window #} {% block scripts %}
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script>
{% block scripts %} <script src="{% static 'tiny_mce/tiny_mce.js' %}"></script>
{# selects #}
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script> <link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>
<script src="{% static 'tiny_mce/tiny_mce.js' %}"></script> <script src="{% static 'js/select/select2.js' %}"></script>
{# selects #}
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/> <script src="{% static 'custom_js/formset_add.js' %}"></script>
<script src="{% static 'js/select/select2.js' %}"></script> <script type="text/javascript">
$(document).ready(function(){
<script src="{% static 'custom_js/formset_add.js' %}"></script> $('#id_data_begin').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy',
<script type="text/javascript"> minView:2
$(document).ready(function(){ });
$('#id_data_begin').datetimepicker({ $('#id_data_end').datetimepicker({
todayHighlight: true, todayHighlight: true,
format : 'dd.mm.yyyy', format : 'dd.mm.yyyy',
minView:2 minView:2
}); });
$('#id_data_end').datetimepicker({ $('#id_end').datetimepicker({
todayHighlight: true, todayHighlight: true,
format : 'dd.mm.yyyy', format : 'dd.mm.yyyy hh:ii'
minView:2
});
$('#id_end').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy hh:ii'
});
$('#id_begin').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy hh:ii'
}); });
$('#id_begin').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy hh:ii'
$('#id_application_deadline').datetimepicker({ });
todayHighlight: true,
format : 'dd.mm.yyyy',
minView:2
});
$('#id_application_deadline').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy',
minView:2
}); });
</script>
{% endblock %} });
</script>
<link rel="stylesheet" href="{% static 'jQuery-filer/css/jquery.filer.css' %}">
<link rel="stylesheet" href="{% static 'jQuery-filer/css/jquery.filer-dragdropbox-theme.css' %}">
<script src="{% static 'jQuery-filer/js/jquery.filer.js' %}"></script>
<script src="{% static 'jQuery-filer/js/init.js' %}"></script>
{% endblock %}
{% block body %} {% block body %}
@ -494,42 +493,10 @@
</div> </div>
{% endif %} {% endif %}
</div> </div>
<div class="box span8" id="file">
<div class="box-header well">
<h2><i class="icon-pencil"></i> Файлы</h2>
</div>
<div class="box-content">
{% if object %}
{# button that shows modal window with file form #}
<a href="#myModal" id="file_add" role="button" class="btn btn-info" data-toggle="modal">Добавить файл</a>
{% else %}
<p>Файлы можно добавлять только после введения основных данных</p>
{% endif %}
{# this div shows list of files and refreshes when new file added #}
<div id="file_list">
<table class="table table-hover">
<thead>
<tr>
<td>id</td>
<td>Файл</td>
<td>Имя</td>
<td>Назначение</td>
<td></td>
</tr>
</thead>
<tbody>
{% include 'file_list.html' with files=files %}
</tbody>
</table>
</div>
</div>
</div>
{% include 'c_admin/includes/filegallery.html' with object=object model='exposition.Exposition' %}
{% include 'c_admin/includes/photogallery.html' with object=object %} {% include 'c_admin/includes/photogallery.html' with object=object %}
<div class="box span8"> <div class="box span8">
<div class="box-header well"> <div class="box-header well">
<h2><i class="icon-pencil"></i>Мета данные</h2> <h2><i class="icon-pencil"></i>Мета данные</h2>
@ -590,14 +557,13 @@
{% with field='place' form=timetable_form languages=languages %} {% with field='place' form=timetable_form languages=languages %}
{% include 'c_admin/forms/multilang.html' %} {% include 'c_admin/forms/multilang.html' %}
{% endwith %} {% endwith %}
<!--
<div class="control-group"> {# <div class="control-group">#}
<label class="control-label">Организатор:</label> {# <label class="control-label">Организатор:</label>#}
<div class="controls"> {# <div class="controls">#}
{{ timetable_form.timetable_organiser }} {# {{ timetable_form.timetable_organiser }}#}
</div> {# </div>#}
</div> {# </div>#}
-->
</div> </div>
</div> </div>
@ -614,6 +580,5 @@
</div> </div>
</div> </div>
{% 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 %} {% include 'c_admin/includes/stat_form.html' with form=stat_form object=object %}
{% endblock %} {% endblock %}

@ -0,0 +1,26 @@
{% extends 'c_admin/base.html' %}
{% block body %}
<form action="." method="post" enctype="multipart/form-data" class="form-horizontal">
<fieldset>
<legend><i class="icon-edit"></i>{% if object %} Изменить {% else %} Добавить {% endif %} файл</legend>
<div class="box span8">
<div class="box-header well">
<h2><i class="icon-pencil"></i> Основная информация</h2>
</div>
<div class="box-content">
{{ form.as_p }}
</div>
<div class="modal-footer">
<div class="controls">
<input class="btn btn-primary" type="submit" value="{% if object %}Изменить{% else %}Добавить{% endif %}">
<input type="reset" class="btn" value="Отменить" data-dismiss="modal">
</div>
</div>
</div>
</fieldset>
</form>
{% endblock %}

@ -1,25 +0,0 @@
{% load thumbnail %}
{% comment %}
Uses in ajax call
Returns table with files properties
{% endcomment %}
{% for file in files %}
<tr>
<td>{{ file.id }}</td>
<td>
{% thumbnail file.file_path "100x100" crop="center" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}
</td>
<td>{{ file.file_name }}</td>
<td>{{ file.purpose }}</td>
<td>
<button class="btn btn-danger delete_file" value="{{ file.id }}">
<i class="icon-trash icon-white"></i> Удалить
</button>
</td>
</tr>
{% endfor %}

@ -1,49 +0,0 @@
<div class="modal hide fade" id="myModal" >
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true" id="close">&times;</button>
<h3>Добавить файл</h3>
</div>
<div id="form_body">
<form method="post" class="form-horizontal" enctype="multipart/form-data" name="file_form" id="file_form" > {% csrf_token %}
<div class="modal-body">
{{ file_form.model }}
<input type="hidden" id="obj_id" value="{{ object.id }}">
{# file_path #}
<div class="control-group{% if file_form.file_path.errors %}error{% endif %}">
<label class="control-label">{{ file_form.file_path.label }}:</label>
<div class="controls">{{ file_form.file_path }}
<span class="help-inline">{{ file_form.file_path.errors }}</span>
</div>
</div>
{# file purpose #}
<div class="control-group{% if file_form.purpose.errors %}error{% endif %}">
<label class="control-label">{{ file_form.purpose.label }}:</label>
<div class="controls">{{ file_form.purpose }}
<span class="help-inline">{{ file_form.purpose.errors }}</span>
</div>
</div>
{# file_name #}
{% with field='file_name' form=file_form languages=languages %}
{% include 'c_admin/forms/multilang.html' %}
{% endwith %}
{# file_description #}
{% with field='description' form=file_form languages=languages %}
{% include 'c_admin/forms/multilang.html' %}
{% endwith %}
</div>
<div class="modal-footer">
<div class="controls">
<input class="btn btn-primary" type="submit" value="Добавить">
<input type="reset" class="btn" value="Отменить" data-dismiss="modal">
</div>
</div>
</form>
</div>
</div>

@ -0,0 +1,19 @@
{% load static %}
<div class="box span8">
<div class="box-header well">
<h2><i class="icon-pencil"></i>Файлы</h2>
</div>
<div class="box-content">
{% if object %}
<div class="file_upload_container"
data-upload-url="{% url 'ajax_post_file' object.pk %}?model={{ model }}">
<input type="file" name="file_path" class="file_uploader">
</div>
{% else %}
<p>Файлы можно добавлять только после введения основных данных</p>
{% endif %}
</div>
</div>

@ -11,12 +11,6 @@
<input type="file" name="image" class="file_uploader"> <input type="file" name="image" class="file_uploader">
</div> </div>
<link rel="stylesheet" href="{% static 'jQuery-filer/css/jquery.filer.css' %}">
<link rel="stylesheet" href="{% static 'jQuery-filer/css/jquery.filer-dragdropbox-theme.css' %}">
<script src="{% static 'jQuery-filer/js/jquery.filer.js' %}"></script>
<script src="{% static 'jQuery-filer/js/init.js' %}"></script>
{% else %} {% else %}
<p>Изображения можно добавлять только после введения основных данных</p> <p>Изображения можно добавлять только после введения основных данных</p>
{% endif %} {% endif %}

@ -12,7 +12,6 @@
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script> <script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script>
{# google map не забыть скачать скрипты на локал #} {# google map не забыть скачать скрипты на локал #}
<link href='http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/themes/redmond/jquery-ui.css' rel="stylesheet"/> <link href='http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/themes/redmond/jquery-ui.css' rel="stylesheet"/>
@ -28,6 +27,10 @@
<!-- <script src="{% static 'custom_js/file_post_ajax.js' %}"></script>--> <!-- <script src="{% static 'custom_js/file_post_ajax.js' %}"></script>-->
<script src="{% static 'custom_js/place_city_ajax.js' %}"></script> <script src="{% static 'custom_js/place_city_ajax.js' %}"></script>
<link rel="stylesheet" href="{% static 'jQuery-filer/css/jquery.filer.css' %}">
<link rel="stylesheet" href="{% static 'jQuery-filer/css/jquery.filer-dragdropbox-theme.css' %}">
<script src="{% static 'jQuery-filer/js/jquery.filer.js' %}"></script>
<script src="{% static 'jQuery-filer/js/init.js' %}"></script>
{% endblock %} {% endblock %}
{% block body %} {% block body %}
@ -263,39 +266,7 @@
</div> </div>
</div> </div>
<div class="box span8" id="file"> {% include 'c_admin/includes/filegallery.html' with object=object model='place_conference.PlaceConference' %}
<div class="box-header well">
<h2><i class="icon-pencil"></i> Файлы</h2>
</div>
<div class="box-content">
{% if object %}
{# button that shows modal window with file form #}
<a href="#myModal" id="file_add" role="button" class="btn btn-info" data-toggle="modal">Добавить файл</a>
{% else %}
<p>Файлы можно добавлять только после введения основных данных</p>
{% endif %}
{# this div shows list of files and refreshes when new file added #}
<div id="file_list">
<table class="table table-hover">
<thead>
<tr>
<td>id</td>
<td>Файл</td>
<td>Имя</td>
<td>Назначение</td>
<td></td>
</tr>
</thead>
<tbody>
{% include 'file_list.html' with files=files %}
</tbody>
</table>
</div>
</div>
</div>
{% include 'c_admin/includes/photogallery.html' with object=object %} {% include 'c_admin/includes/photogallery.html' with object=object %}
<div class="box span8"> <div class="box span8">
@ -333,6 +304,5 @@
{% include 'c_admin/includes/hall_form.html' with form=hall_form object=object %} {% 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 %} {% endblock %}

@ -1,5 +1,6 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% block styles %} {% block styles %}
.hover{ .hover{
display:none; display:none;
@ -12,7 +13,6 @@
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script> <script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script>
{# google map не забыть скачать скрипты на локал #} {# google map не забыть скачать скрипты на локал #}
<link href='https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/themes/redmond/jquery-ui.css' rel="stylesheet"/> <link href='https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/themes/redmond/jquery-ui.css' rel="stylesheet"/>
@ -28,6 +28,10 @@
<!-- <script src="{% static 'custom_js/file_post_ajax.js' %}"></script>--> <!-- <script src="{% static 'custom_js/file_post_ajax.js' %}"></script>-->
<script src="{% static 'custom_js/place_city_ajax.js' %}"></script> <script src="{% static 'custom_js/place_city_ajax.js' %}"></script>
<link rel="stylesheet" href="{% static 'jQuery-filer/css/jquery.filer.css' %}">
<link rel="stylesheet" href="{% static 'jQuery-filer/css/jquery.filer-dragdropbox-theme.css' %}">
<script src="{% static 'jQuery-filer/js/jquery.filer.js' %}"></script>
<script src="{% static 'jQuery-filer/js/init.js' %}"></script>
{% endblock %} {% endblock %}
{% block body %} {% block body %}
@ -323,39 +327,7 @@
</div> </div>
</div> </div>
<div class="box span8" id="file"> {% include 'c_admin/includes/filegallery.html' with object=object model='place_exposition.PlaceExposition' %}
<div class="box-header well">
<h2><i class="icon-pencil"></i> Файлы</h2>
</div>
<div class="box-content">
{% if object %}
{# button that shows modal window with file form #}
<a href="#myModal" id="file_add" role="button" class="btn btn-info" data-toggle="modal">Добавить файл</a>
{% else %}
<p>Файлы можно добавлять только после введения основных данных</p>
{% endif %}
{# this div shows list of files and refreshes when new file added #}
<div id="file_list">
<table class="table table-hover">
<thead>
<tr>
<td>id</td>
<td>Файл</td>
<td>Имя</td>
<td>Назначение</td>
<td></td>
</tr>
</thead>
<tbody>
{% include 'file_list.html' with files=files %}
</tbody>
</table>
</div>
</div>
</div>
{% include 'c_admin/includes/photogallery.html' with object=object %} {% include 'c_admin/includes/photogallery.html' with object=object %}
<div class="box span8"> <div class="box span8">
@ -393,6 +365,5 @@
{% include 'c_admin/includes/hall_form.html' with form=hall_form object=object %} {% 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 %} {% endblock %}

Loading…
Cancel
Save