mirror of
https://github.com/MOIS3Y/logs-collector.git
synced 2025-02-01 01:10: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.db.models import F
|
||||
from django.urls import reverse
|
||||
from django.utils.html import format_html
|
||||
from django.utils.translation import ngettext
|
||||
@ -66,15 +67,20 @@ class ArchiveAdmin(admin.ModelAdmin):
|
||||
search_fields = ('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):
|
||||
return sizify(obj.file.size)
|
||||
return sizify(obj.size)
|
||||
|
||||
def file_link(self, obj):
|
||||
if obj.file:
|
||||
file_name = obj.file.name.rpartition('/')[-1]
|
||||
file_path = reverse(
|
||||
'collector:download',
|
||||
kwargs={'path': file_name}
|
||||
kwargs={'path': obj.file}
|
||||
)
|
||||
return format_html(
|
||||
'<a href="{file_path}">{file_name}</a>',
|
||||
@ -86,6 +92,7 @@ class ArchiveAdmin(admin.ModelAdmin):
|
||||
|
||||
file_link.allow_tags = True
|
||||
file_link.short_description = 'File Download'
|
||||
file_size.admin_order_field = 'file_size'
|
||||
|
||||
|
||||
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
|
||||
from django.conf import settings
|
||||
@ -47,7 +47,8 @@ class Migration(migrations.Migration):
|
||||
name='Archive',
|
||||
fields=[
|
||||
('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)),
|
||||
('time_create', models.DateTimeField(auto_now_add=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):
|
||||
file = models.FileField(upload_to=logs_dir_path)
|
||||
size = models.BigIntegerField(editable=False)
|
||||
md5 = models.CharField(max_length=1024, editable=False)
|
||||
time_create = models.DateTimeField(auto_now_add=True)
|
||||
time_update = models.DateTimeField(auto_now=True)
|
||||
@ -22,6 +23,8 @@ class Archive(models.Model):
|
||||
)
|
||||
|
||||
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
|
||||
with self.file.open('rb') as f:
|
||||
md5 = hashlib.md5()
|
||||
|
@ -19,7 +19,7 @@
|
||||
<br>
|
||||
<small>
|
||||
<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>
|
||||
<div class="row">
|
||||
<div class="d-flex justify-content-sm-start justify-content-between" >
|
||||
|
@ -13,31 +13,6 @@ def get_platforms():
|
||||
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')
|
||||
def clean_filename(filename: str) -> str:
|
||||
"""delete prefix ticket number folder for template
|
||||
|
Loading…
Reference in New Issue
Block a user