mirror of
https://github.com/MOIS3Y/logs-collector.git
synced 2025-02-01 09:20:52 +01:00
Modify: Archive model - add size field, now use this field for web and admin page
This commit is contained in:
parent
332764fca2
commit
eec55b803d
@ -1,4 +1,5 @@
|
|||||||
from django.contrib import admin, messages
|
from django.contrib import admin, messages
|
||||||
|
from django.db.models import F
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.html import format_html
|
from django.utils.html import format_html
|
||||||
from django.utils.translation import ngettext
|
from django.utils.translation import ngettext
|
||||||
@ -66,15 +67,20 @@ class ArchiveAdmin(admin.ModelAdmin):
|
|||||||
search_fields = ('ticket',)
|
search_fields = ('ticket',)
|
||||||
list_filter = ('time_create', 'ticket')
|
list_filter = ('time_create', 'ticket')
|
||||||
|
|
||||||
|
def get_queryset(self, request):
|
||||||
|
qs = super(ArchiveAdmin, self).get_queryset(request)
|
||||||
|
qs = qs.annotate(file_size=F('size'))
|
||||||
|
return qs
|
||||||
|
|
||||||
def file_size(self, obj):
|
def file_size(self, obj):
|
||||||
return sizify(obj.file.size)
|
return sizify(obj.size)
|
||||||
|
|
||||||
def file_link(self, obj):
|
def file_link(self, obj):
|
||||||
if obj.file:
|
if obj.file:
|
||||||
file_name = obj.file.name.rpartition('/')[-1]
|
file_name = obj.file.name.rpartition('/')[-1]
|
||||||
file_path = reverse(
|
file_path = reverse(
|
||||||
'collector:download',
|
'collector:download',
|
||||||
kwargs={'path': file_name}
|
kwargs={'path': obj.file}
|
||||||
)
|
)
|
||||||
return format_html(
|
return format_html(
|
||||||
'<a href="{file_path}">{file_name}</a>',
|
'<a href="{file_path}">{file_name}</a>',
|
||||||
@ -86,6 +92,7 @@ class ArchiveAdmin(admin.ModelAdmin):
|
|||||||
|
|
||||||
file_link.allow_tags = True
|
file_link.allow_tags = True
|
||||||
file_link.short_description = 'File Download'
|
file_link.short_description = 'File Download'
|
||||||
|
file_size.admin_order_field = 'file_size'
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(Platform, PlatformAdmin)
|
admin.site.register(Platform, PlatformAdmin)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Generated by Django 4.2 on 2023-08-30 05:52
|
# Generated by Django 4.2 on 2023-09-02 09:30
|
||||||
|
|
||||||
import collector.utils
|
import collector.utils
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@ -47,7 +47,8 @@ class Migration(migrations.Migration):
|
|||||||
name='Archive',
|
name='Archive',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
('file', models.FileField(blank=True, null=True, upload_to=collector.utils.logs_dir_path)),
|
('file', models.FileField(upload_to=collector.utils.logs_dir_path)),
|
||||||
|
('size', models.BigIntegerField(editable=False)),
|
||||||
('md5', models.CharField(editable=False, max_length=1024)),
|
('md5', models.CharField(editable=False, max_length=1024)),
|
||||||
('time_create', models.DateTimeField(auto_now_add=True)),
|
('time_create', models.DateTimeField(auto_now_add=True)),
|
||||||
('time_update', models.DateTimeField(auto_now=True)),
|
('time_update', models.DateTimeField(auto_now=True)),
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
# Generated by Django 4.2 on 2023-08-30 08:40
|
|
||||||
|
|
||||||
import collector.utils
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('collector', '0001_initial'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='archive',
|
|
||||||
name='file',
|
|
||||||
field=models.FileField(upload_to=collector.utils.logs_dir_path),
|
|
||||||
),
|
|
||||||
]
|
|
@ -11,6 +11,7 @@ from .utils import logs_dir_path
|
|||||||
|
|
||||||
class Archive(models.Model):
|
class Archive(models.Model):
|
||||||
file = models.FileField(upload_to=logs_dir_path)
|
file = models.FileField(upload_to=logs_dir_path)
|
||||||
|
size = models.BigIntegerField(editable=False)
|
||||||
md5 = models.CharField(max_length=1024, editable=False)
|
md5 = models.CharField(max_length=1024, editable=False)
|
||||||
time_create = models.DateTimeField(auto_now_add=True)
|
time_create = models.DateTimeField(auto_now_add=True)
|
||||||
time_update = models.DateTimeField(auto_now=True)
|
time_update = models.DateTimeField(auto_now=True)
|
||||||
@ -22,6 +23,8 @@ class Archive(models.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
# add file size in bytes
|
||||||
|
self.size = self.file.size
|
||||||
# calculate md5 hash sum and write md5 field to db
|
# calculate md5 hash sum and write md5 field to db
|
||||||
with self.file.open('rb') as f:
|
with self.file.open('rb') as f:
|
||||||
md5 = hashlib.md5()
|
md5 = hashlib.md5()
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<br>
|
<br>
|
||||||
<small>
|
<small>
|
||||||
<b>Size:</b>
|
<b>Size:</b>
|
||||||
<span style="word-wrap: break-word">{{ archive.file.size|sizify }}</span>
|
<span style="word-wrap: break-word">{{ archive.size|filesizeformat }}</span>
|
||||||
</small>
|
</small>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="d-flex justify-content-sm-start justify-content-between" >
|
<div class="d-flex justify-content-sm-start justify-content-between" >
|
||||||
|
@ -13,31 +13,6 @@ def get_platforms():
|
|||||||
return Platform.objects.all()
|
return Platform.objects.all()
|
||||||
|
|
||||||
|
|
||||||
@register.filter(name='sizify')
|
|
||||||
def sizify(value: int) -> str:
|
|
||||||
"""Simple kb/mb/gb size snippet for templates:
|
|
||||||
|
|
||||||
{{ Archive.file.size|sizify }}
|
|
||||||
|
|
||||||
Args:
|
|
||||||
value (int): size of file from Filefield
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
str: format human readable size like 4.2 Gb
|
|
||||||
"""
|
|
||||||
|
|
||||||
if value < 512000:
|
|
||||||
value = value / 1024.0
|
|
||||||
ext = 'Kb'
|
|
||||||
elif value < 4194304000:
|
|
||||||
value = value / 1048576.0
|
|
||||||
ext = 'Mb'
|
|
||||||
else:
|
|
||||||
value = value / 1073741824.0
|
|
||||||
ext = 'Gb'
|
|
||||||
return f'{round(value, 2)} {ext}'
|
|
||||||
|
|
||||||
|
|
||||||
@register.filter(name='clean_filename')
|
@register.filter(name='clean_filename')
|
||||||
def clean_filename(filename: str) -> str:
|
def clean_filename(filename: str) -> str:
|
||||||
"""delete prefix ticket number folder for template
|
"""delete prefix ticket number folder for template
|
||||||
|
Loading…
Reference in New Issue
Block a user