0.5.11 documentation file storage
This commit is contained in:
@@ -272,9 +272,9 @@ class Admin_BaseIconModel(admin.ModelAdmin):
|
||||
|
||||
# ckeditor + youtube фикс
|
||||
for field in form.changed_data:
|
||||
if type(field) == str:
|
||||
if 'RichTextUploading' in str(form.fields[field]):
|
||||
val = getattr(obj, field, None)
|
||||
if val:
|
||||
if val and type(val) == str:
|
||||
val = val.replace(' sandbox=""', '')
|
||||
setattr(obj, field, val)
|
||||
# setattr(form.instance, field, val)
|
||||
|
||||
@@ -48,11 +48,17 @@ class DocArt(BaseModelViewPage):
|
||||
# self.modifiedDT = datetime.now()
|
||||
# super().save(*args, **kwargs)
|
||||
|
||||
def get_last_child(self):
|
||||
return self.rel_childArts_for_docArt.filter(enable=True).order_by('-order').first()
|
||||
def get_last_child(self, version):
|
||||
return self.rel_childArts_for_docArt.filter(
|
||||
versions=version,
|
||||
enable=True
|
||||
).order_by('-order').first()
|
||||
|
||||
def get_first_child(self):
|
||||
return self.rel_childArts_for_docArt.filter(enable=True).order_by('order').first()
|
||||
def get_first_child(self, version):
|
||||
return self.rel_childArts_for_docArt.filter(
|
||||
versions=version,
|
||||
enable=True
|
||||
).order_by('order').first()
|
||||
|
||||
def get_last_version(self):
|
||||
return self.versions.all().order_by('-order').first()
|
||||
@@ -73,8 +79,8 @@ class DocArt(BaseModelViewPage):
|
||||
).order_by('-order').first()
|
||||
|
||||
if art:
|
||||
while art.get_last_child():
|
||||
art = art.get_last_child()
|
||||
while art.get_last_child(version=version):
|
||||
art = art.get_last_child(version=version)
|
||||
|
||||
if not art and self.parent:
|
||||
art = self.parent
|
||||
@@ -86,7 +92,7 @@ class DocArt(BaseModelViewPage):
|
||||
if not version:
|
||||
version = self.get_last_version()
|
||||
|
||||
art = self.get_first_child()
|
||||
art = self.get_first_child(version=version)
|
||||
if not art:
|
||||
art = DocArt.objects.filter(
|
||||
enable=True,
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
from django import forms
|
||||
|
||||
from sets.admin import *
|
||||
from .models import *
|
||||
from django.contrib import admin
|
||||
@@ -21,31 +23,45 @@ class LogEntryAdmin(admin.ModelAdmin):
|
||||
admin.site.register(LogEntry, LogEntryAdmin)
|
||||
|
||||
|
||||
|
||||
class Admin_FileUnit(Admin_Trans_BaseModelViewPage):
|
||||
|
||||
def formfield_for_dbfield(self, db_field, request, **kwargs):
|
||||
from filebrowser.fields import FileBrowseWidget
|
||||
|
||||
formfield = super(Admin_FileUnit, self).formfield_for_dbfield(db_field, request, **kwargs)
|
||||
if db_field and db_field.name in ['file']:
|
||||
widget_sets = formfield.widget.site
|
||||
formfield.widget = FileBrowseWidget(attrs={'style': 'width: 80%'})
|
||||
formfield.widget.site = widget_sets
|
||||
|
||||
return formfield
|
||||
def fn(self, obj):
|
||||
return obj.file.filename
|
||||
fn.short_description = 'Файл'
|
||||
|
||||
def fn_full_path(self, obj):
|
||||
return obj.file.url
|
||||
fn_full_path.short_description = 'Линк для использования в HTML'
|
||||
|
||||
fieldsets = [
|
||||
(None, {
|
||||
'classes': [],
|
||||
'fields': [
|
||||
('name',),
|
||||
# ('name',),
|
||||
('file',),
|
||||
# 'image'
|
||||
'order'
|
||||
]
|
||||
})
|
||||
]
|
||||
|
||||
list_display = [
|
||||
'image_thumb',
|
||||
'id',
|
||||
'fn',
|
||||
'fn_full_path',
|
||||
# 'title',
|
||||
'order', 'modifiedDT', 'createDT'
|
||||
]
|
||||
|
||||
list_display_links = ['id', 'image_thumb']
|
||||
list_editable = ['order']
|
||||
|
||||
list_filter = ['modifiedDT', 'createDT']
|
||||
search_fields = ['file']
|
||||
|
||||
|
||||
admin.site.register(FileUnit, Admin_FileUnit)
|
||||
|
||||
|
||||
|
||||
@@ -15,6 +15,14 @@ from filebrowser.base import FileObject
|
||||
class FileUnit(BaseModel):
|
||||
file = FileBrowseField(verbose_name=_('Файл'), max_length=250, directory="files/")
|
||||
|
||||
def __str__(self):
|
||||
if self.file:
|
||||
return self.file.filename
|
||||
else:
|
||||
return str(self.id)
|
||||
class Meta:
|
||||
verbose_name = _('Файл')
|
||||
verbose_name_plural = _('Файлы')
|
||||
|
||||
class StaticPage(BaseModelViewPage):
|
||||
promo_header = models.BooleanField(verbose_name='Промо-хэдер', default=False)
|
||||
|
||||
@@ -6,4 +6,5 @@ django-modeltranslation==0.18.11
|
||||
Pillow==10.1.0
|
||||
psycopg2-binary==2.9.9
|
||||
django-super-inlines
|
||||
django-filebrowser-4.0.3
|
||||
django-filebrowser-no-grappelli==4.0.2
|
||||
30
templates/filebrowser/custom_field.html
Normal file
30
templates/filebrowser/custom_field.html
Normal file
@@ -0,0 +1,30 @@
|
||||
{% load i18n fb_versions %}
|
||||
<input id="{{ final_attrs.id }}" type="text" class="vFileBrowseField{% if final_attrs.class %} {{ final_attrs.class }}{% endif %}" style="width: 80%;" name="{{ final_attrs.name }}" value="{{ value.path }}" {% for k, v in final_attrs.data_attrs.items %}{{k}}="{{v}}" {% endfor %}/>
|
||||
<a href="#" onclick="FileBrowser.show(this.parentNode.getElementsByTagName('input')[0].id, '{{ url }}?pop=1{% if final_attrs.directory %}&dir={{ final_attrs.directory|urlencode|urlencode }}{% endif %}{% if final_attrs.format %}&filter={{ final_attrs.format }}{% endif %}');" class="fb_show">
|
||||
<img src="{{ final_attrs.search_icon }}" style="margin: 5px 0 0 10px;" alt="{% trans "Change" %}" />
|
||||
</a>
|
||||
{% if value.filetype == "Image" and value.exists %}
|
||||
{% version value.path final_attrs.ADMIN_THUMBNAIL as thumbnail_version %}
|
||||
{% if thumbnail_version %}
|
||||
<p class="preview" id="preview_{{ final_attrs.id }}">
|
||||
<a href="{{ value.url }}" target="_blank" id="previewlink_{{ final_attrs.id }}">
|
||||
<img id="previewimage_{{ final_attrs.id }}" src="{{ thumbnail_version.url }}" class="preview" />
|
||||
</a>
|
||||
</p>
|
||||
{% else %}
|
||||
<p class="preview" id="preview_{{ final_attrs.id }}" style="display: none;">
|
||||
<a href="javascript://" target="_self" id="previewlink_{{ final_attrs.id }}">
|
||||
<img id="previewimage_{{ final_attrs.id }}" class="preview" src="" />
|
||||
</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<p class="preview" id="preview_{{ final_attrs.id }}" style="display: none;">
|
||||
<a href="javascript://" target="_self" id="previewlink_{{ final_attrs.id }}">
|
||||
<img id="previewimage_{{ final_attrs.id }}" class="preview" src="" />
|
||||
</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if value and not value.exists %}
|
||||
<ul class="errorlist"><li>{% trans "File not found" %}</li></ul>
|
||||
{% endif %}
|
||||
@@ -133,16 +133,16 @@
|
||||
<img class="arrow_control_content_part_tree_el_img" src="{% static "images/arrow_control_part_tree_el.svg" %}" alt="">
|
||||
</picture>
|
||||
|
||||
<a class="txt_control_content_part_tree_el" href="{% url 'docs_art_page' cur_version.url prev_article.url %}">
|
||||
<div class="txt_control_content_part_tree_el" data-url="{% url 'docs_art_page' cur_version.url prev_article.url %}" onclick="changeCurArticle(this)">
|
||||
{% trans "Предыдущий" %}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="control_content_part_tree_el right">
|
||||
{% if next_article %}
|
||||
<a class="txt_control_content_part_tree_el" href="{% url 'docs_art_page' cur_version.url next_article.url %}">
|
||||
<div class="txt_control_content_part_tree_el" data-url="{% url 'docs_art_page' cur_version.url next_article.url %}" onclick="changeCurArticle(this)">
|
||||
{% trans "Следующий" %}
|
||||
</a>
|
||||
</div>
|
||||
<picture class="arrow_control_content_part_tree_el_picture">
|
||||
<source srcset="{% static "images/arrow_control_part_tree_el.svg" %}">
|
||||
<img class="arrow_control_content_part_tree_el_img" src="{% static "images/arrow_control_part_tree_el.svg" %}" alt="">
|
||||
|
||||
Reference in New Issue
Block a user