расширил данные для редактирования файлов в админке

remotes/origin/HEAD
Slava Kyrachevsky 9 years ago
parent 50f25bf381
commit 0e746dd476
  1. 37
      apps/file/admin.py
  2. 41
      apps/file/forms.py
  3. 1
      requirements.txt
  4. 33
      templates/c_admin/file/file_update.html

@ -4,12 +4,15 @@ from django.views.decorators.csrf import csrf_exempt
from django.db.models.loading import get_model from django.db.models.loading import get_model
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.http import HttpResponse from django.http import HttpResponse
from django.views.generic import UpdateView from django.views.generic import FormView
from django.shortcuts import get_object_or_404
from django.conf import settings
from .models import FileModel from .models import FileModel
from .forms import FileForm, FileUpdateForm from .forms import FileForm, FileUpdateForm
import json import json
import magic
@csrf_exempt @csrf_exempt
@ -39,11 +42,12 @@ def ajax_post_file(request, obj_id):
) )
files_data = [] files_data = []
for f in files: for f in files:
mime = magic.Magic(mime=True)
files_data.append({ files_data.append({
'name': f.file_name or f.file_path.name, 'name': f.file_name or f.file_path.name,
'size': f.file_path.size, 'size': f.file_path.size,
'file': f.file_path.url, 'file': f.file_path.url,
'type': 'file', 'type': mime.from_file(f.file_path.path),
'remove_url': reverse('ajax_delete_file', args=[f.pk]), 'remove_url': reverse('ajax_delete_file', args=[f.pk]),
'detail_link': reverse('file_update', args=[f.pk]) 'detail_link': reverse('file_update', args=[f.pk])
}) })
@ -66,13 +70,36 @@ def ajax_delete_file(request, id):
return HttpResponse(json.dumps(data), content_type='application/json') return HttpResponse(json.dumps(data), content_type='application/json')
class FileUpdateView(UpdateView): class FileUpdateView(FormView):
""" """
Представление обновления файла Представление обновления файла
""" """
template_name = 'c_admin/file/file_update.html' template_name = 'c_admin/file/file_update.html'
form_class = FileUpdateForm form_class = FileUpdateForm
model = FileModel
def get_object(self):
pk = self.kwargs.get('pk')
return get_object_or_404(FileModel, pk=pk)
def get_initial(self):
data = super(FileUpdateView, self).get_initial()
obj = self.get_object()
data['file_path'] = obj.file_path
data['purpose'] = obj.purpose
for lid, (code, name) in enumerate(settings.LANGUAGES):
data['file_name_%s' % code] = obj.file_name.translate(code)
data['description_%s' % code] = obj.description.translate(code)
return data
def form_valid(self, form):
form.save(self.request, self.kwargs.get('pk'))
return super(FileUpdateView, self).form_valid(form)
def get_success_url(self): def get_success_url(self):
return reverse('file_update', args=[self.object.pk]) return reverse('file_update', args=[self.get_object().pk])
def get_context_data(self, **kwargs):
ctx = super(FileUpdateView, self).get_context_data(**kwargs)
ctx['object'] = self.get_object()
ctx['languages'] = settings.LANGUAGES
return ctx

@ -84,13 +84,46 @@ class FileForm(forms.Form):
return file_obj return file_obj
class FileUpdateForm(forms.ModelForm): class FileUpdateForm(forms.Form):
""" """
Форма обновления файла в админ панели Форма обновления файла в админ панели
""" """
class Meta: file_path = forms.FileField(label=_(u'Выберите файл'))
model = FileModel purpose = forms.ChoiceField(label=_(u'Назаначение'), choices=PURPOSES)
fields = ('file_path',)
def __init__(self, *args, **kwargs):
"""
Создаём динамические поля переводов
"""
super(FileUpdateForm, self).__init__(*args, **kwargs)
for lid, (code, name) in enumerate(settings.LANGUAGES):
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=CKEditorWidget()
)
def save(self, request, id=None):
data = self.cleaned_data
if id is None:
f = FileModel()
else:
f = FileModel.objects.get(id=id)
f.file_path = data['file_path']
f.purpose = data['purpose']
f.save()
# fill translated fields and save object
fill_trans_fields_all(FileModel, f, data, id=id)
return f
class FileModelForm(forms.Form): class FileModelForm(forms.Form):

@ -44,6 +44,7 @@ pymorphy2==0.8
pymorphy2-dicts==2.4.393442.3710985 pymorphy2-dicts==2.4.393442.3710985
pysolr==3.2.0 pysolr==3.2.0
python-dateutil==2.2 python-dateutil==2.2
python-magic==0.4.12
python-memcached==1.48 python-memcached==1.48
python-openid==2.2.5 python-openid==2.2.5
python-social-auth==0.1.23 python-social-auth==0.1.23

@ -1,4 +1,9 @@
{% extends 'c_admin/base.html' %} {% extends 'c_admin/base.html' %}
{% load static %}
{% block scripts %}
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script>
{% endblock %}
{% block body %} {% block body %}
<form action="." method="post" enctype="multipart/form-data" class="form-horizontal"> <form action="." method="post" enctype="multipart/form-data" class="form-horizontal">
@ -11,7 +16,33 @@
<h2><i class="icon-pencil"></i> Основная информация</h2> <h2><i class="icon-pencil"></i> Основная информация</h2>
</div> </div>
<div class="box-content"> <div class="box-content">
{{ form.as_p }} {# {{ form.as_p }}#}
{% with field='file_name' form=form languages=languages %}
{% include 'c_admin/forms/multilang.html' %}
{% endwith %}
<div class="control-group {% if form.file_path.errors %}error{% endif %}">
<label class="control-label">
<b>{{ form.file_path.label }}:</b>
</label>
<div class="controls">{{ form.file_path }}
<span class="help-inline">{{ form.file_path.errors }}</span>
</div>
</div>
<div class="control-group {% if form.purpose.errors %}error{% endif %}">
<label class="control-label">
<b>{{ form.purpose.label }}:</b>
</label>
<div class="controls">{{ form.purpose }}
<span class="help-inline">{{ form.purpose.errors }}</span>
</div>
</div>
{% with field='description' form=form languages=languages %}
{% include 'c_admin/forms/multilang.html' %}
{% endwith %}
</div> </div>

Loading…
Cancel
Save