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/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import os.path as path
|
||||||
import hashlib
|
import hashlib
|
||||||
import mimetypes
|
import mimetypes
|
||||||
mimetypes.init()
|
mimetypes.init()
|
||||||
|
@ -59,6 +60,8 @@ class BaseAttachmentViewSet(HistoryResourceMixin, WatchedResourceMixin, ModelCru
|
||||||
if not obj.id:
|
if not obj.id:
|
||||||
obj.content_type = self.get_content_type()
|
obj.content_type = self.get_content_type()
|
||||||
obj.owner = self.request.user
|
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:
|
if obj.project_id != obj.content_object.project_id:
|
||||||
raise exc.WrongArguments("Project ID not matches between object and project")
|
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)
|
default=timezone.now)
|
||||||
modified_date = models.DateTimeField(null=False, blank=False,
|
modified_date = models.DateTimeField(null=False, blank=False,
|
||||||
verbose_name=_("modified date"))
|
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,
|
attached_file = models.FileField(max_length=500, null=True, blank=True,
|
||||||
upload_to=get_attachment_file_path,
|
upload_to=get_attachment_file_path,
|
||||||
verbose_name=_("attached file"))
|
verbose_name=_("attached file"))
|
||||||
|
|
||||||
|
|
||||||
is_deprecated = models.BooleanField(default=False, verbose_name=_("is deprecated"))
|
is_deprecated = models.BooleanField(default=False, verbose_name=_("is deprecated"))
|
||||||
description = models.TextField(null=False, blank=True, verbose_name=_("description"))
|
description = models.TextField(null=False, blank=True, verbose_name=_("description"))
|
||||||
order = models.IntegerField(default=0, null=False, blank=False, verbose_name=_("order"))
|
order = models.IntegerField(default=0, null=False, blank=False, verbose_name=_("order"))
|
||||||
|
|
||||||
_importing = None
|
_importing = None
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -28,10 +28,7 @@ from . import models
|
||||||
|
|
||||||
|
|
||||||
class AttachmentSerializer(serializers.ModelSerializer):
|
class AttachmentSerializer(serializers.ModelSerializer):
|
||||||
name = serializers.SerializerMethodField("get_name")
|
|
||||||
url = serializers.SerializerMethodField("get_url")
|
url = serializers.SerializerMethodField("get_url")
|
||||||
size = serializers.SerializerMethodField("get_size")
|
|
||||||
|
|
||||||
attached_file = serializers.FileField(required=True)
|
attached_file = serializers.FileField(required=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -41,11 +38,6 @@ class AttachmentSerializer(serializers.ModelSerializer):
|
||||||
"object_id", "order")
|
"object_id", "order")
|
||||||
read_only_fields = ("owner", "created_date", "modified_date")
|
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):
|
def get_url(self, obj):
|
||||||
token = None
|
token = None
|
||||||
|
|
||||||
|
@ -59,10 +51,3 @@ class AttachmentSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
return url
|
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