From 83d50657ef04a171e62f44dafb38684a5f9b6610 Mon Sep 17 00:00:00 2001 From: SDE Date: Mon, 15 Jul 2024 02:22:53 +0300 Subject: [PATCH] 0.5.11 documentation file storage --- BaseModels/admin_utils.py | 4 +-- DocsApp/models.py | 20 ++++++++----- GeneralApp/admin.py | 38 ++++++++++++++++++------- GeneralApp/models.py | 8 ++++++ requirements.pip | 1 + templates/filebrowser/custom_field.html | 30 +++++++++++++++++++ templates/pages/p_documentation.html | 8 +++--- 7 files changed, 85 insertions(+), 24 deletions(-) create mode 100644 templates/filebrowser/custom_field.html diff --git a/BaseModels/admin_utils.py b/BaseModels/admin_utils.py index 014e480..df6247e 100644 --- a/BaseModels/admin_utils.py +++ b/BaseModels/admin_utils.py @@ -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) diff --git a/DocsApp/models.py b/DocsApp/models.py index 2ce6211..b1447ee 100644 --- a/DocsApp/models.py +++ b/DocsApp/models.py @@ -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, diff --git a/GeneralApp/admin.py b/GeneralApp/admin.py index 579d773..9041d2f 100644 --- a/GeneralApp/admin.py +++ b/GeneralApp/admin.py @@ -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) diff --git a/GeneralApp/models.py b/GeneralApp/models.py index 37bc810..9410edc 100644 --- a/GeneralApp/models.py +++ b/GeneralApp/models.py @@ -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) diff --git a/requirements.pip b/requirements.pip index 609afcd..297f1e1 100644 --- a/requirements.pip +++ b/requirements.pip @@ -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 \ No newline at end of file diff --git a/templates/filebrowser/custom_field.html b/templates/filebrowser/custom_field.html new file mode 100644 index 0000000..e4671b5 --- /dev/null +++ b/templates/filebrowser/custom_field.html @@ -0,0 +1,30 @@ +{% load i18n fb_versions %} + + + {% trans + +{% if value.filetype == "Image" and value.exists %} +{% version value.path final_attrs.ADMIN_THUMBNAIL as thumbnail_version %} +{% if thumbnail_version %} +

+ + + +

+{% else %} + +{% endif %} +{% else %} + +{% endif %} +{% if value and not value.exists %} + +{% endif %} diff --git a/templates/pages/p_documentation.html b/templates/pages/p_documentation.html index d821879..e04e0c5 100644 --- a/templates/pages/p_documentation.html +++ b/templates/pages/p_documentation.html @@ -133,16 +133,16 @@ - +
{% trans "Предыдущий" %} - +
{% endif %}
{% if next_article %} - +