Add cached name and size fields to attachment model.
parent
95845b4eda
commit
b20a9d1199
|
@ -15,6 +15,7 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import os
|
||||
import os.path as path
|
||||
import hashlib
|
||||
import mimetypes
|
||||
mimetypes.init()
|
||||
|
@ -59,6 +60,8 @@ class BaseAttachmentViewSet(HistoryResourceMixin, WatchedResourceMixin, ModelCru
|
|||
if not obj.id:
|
||||
obj.content_type = self.get_content_type()
|
||||
obj.owner = self.request.user
|
||||
obj.size = obj.attached_file.size
|
||||
obj.name = path.basename(obj.attached_file.name).lower()
|
||||
|
||||
if obj.project_id != obj.content_object.project_id:
|
||||
raise exc.WrongArguments("Project ID not matches between object and project")
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import os.path as path
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
def parse_filenames_and_sizes(apps, schema_editor):
|
||||
Attachment = apps.get_model("attachments", "Attachment")
|
||||
|
||||
for item in Attachment.objects.all():
|
||||
try:
|
||||
item.size = item.attached_file.size
|
||||
except Exception as e:
|
||||
item.size = 0
|
||||
|
||||
item.name = path.basename(item.attached_file.name)
|
||||
item.save()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('attachments', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='attachment',
|
||||
name='name',
|
||||
field=models.CharField(default='', blank=True, max_length=500),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='attachment',
|
||||
name='size',
|
||||
field=models.IntegerField(editable=False, null=True, blank=True, default=None),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.RunPython(parse_filenames_and_sizes)
|
||||
]
|
|
@ -51,13 +51,17 @@ class Attachment(models.Model):
|
|||
default=timezone.now)
|
||||
modified_date = models.DateTimeField(null=False, blank=False,
|
||||
verbose_name=_("modified date"))
|
||||
|
||||
name = models.CharField(blank=True, default="", max_length=500)
|
||||
size = models.IntegerField(null=True, blank=True, editable=False, default=None)
|
||||
attached_file = models.FileField(max_length=500, null=True, blank=True,
|
||||
upload_to=get_attachment_file_path,
|
||||
verbose_name=_("attached file"))
|
||||
|
||||
|
||||
is_deprecated = models.BooleanField(default=False, verbose_name=_("is deprecated"))
|
||||
description = models.TextField(null=False, blank=True, verbose_name=_("description"))
|
||||
order = models.IntegerField(default=0, null=False, blank=False, verbose_name=_("order"))
|
||||
|
||||
_importing = None
|
||||
|
||||
class Meta:
|
||||
|
|
|
@ -28,10 +28,7 @@ from . import models
|
|||
|
||||
|
||||
class AttachmentSerializer(serializers.ModelSerializer):
|
||||
name = serializers.SerializerMethodField("get_name")
|
||||
url = serializers.SerializerMethodField("get_url")
|
||||
size = serializers.SerializerMethodField("get_size")
|
||||
|
||||
attached_file = serializers.FileField(required=True)
|
||||
|
||||
class Meta:
|
||||
|
@ -41,11 +38,6 @@ class AttachmentSerializer(serializers.ModelSerializer):
|
|||
"object_id", "order")
|
||||
read_only_fields = ("owner", "created_date", "modified_date")
|
||||
|
||||
def get_name(self, obj):
|
||||
if obj.attached_file:
|
||||
return path.basename(obj.attached_file.path)
|
||||
return ""
|
||||
|
||||
def get_url(self, obj):
|
||||
token = None
|
||||
|
||||
|
@ -59,10 +51,3 @@ class AttachmentSerializer(serializers.ModelSerializer):
|
|||
|
||||
return url
|
||||
|
||||
def get_size(self, obj):
|
||||
if obj.attached_file:
|
||||
try:
|
||||
return obj.attached_file.size
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
return 0
|
||||
|
|
Loading…
Reference in New Issue