Gallery-Archivist/backend/apps/files/models.py

54 lines
1.7 KiB
Python

import mimetypes
from django.db import models
def get_upload_to(instance, filename, folder):
return f"{folder}/{instance.hash_blake3[:2]}/{instance.hash_blake3[2:4]}/{filename}"
def get_upload_to_posts(instance, filename):
return get_upload_to(instance, filename, "posts")
class FileNameModel(models.Model):
filename = models.CharField(max_length=512)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = "File Name"
verbose_name_plural = "File Names"
def __str__(self):
return str(self.filename)
class PostFileModel(models.Model):
name = models.ManyToManyField(to=FileNameModel, related_name="post_files")
file = models.FileField(upload_to=get_upload_to_posts, blank=True)
# Hash for file identification (blake3 is used for deduplication)
hash_blake3 = models.CharField(max_length=128)
hash_md5 = models.CharField(max_length=32)
hash_sha1 = models.CharField(max_length=40)
hash_sha256 = models.CharField(max_length=64)
hash_sha512 = models.CharField(max_length=128)
# Image Blur Hash for preview presentation
blur_hash = models.CharField(max_length=32)
# If file has width and hight save it.
hight = models.IntegerField(null=True)
width = models.IntegerField(null=True)
mimetype = models.CharField(max_length=256, blank=True)
extension = models.CharField(max_length=64, blank=True)
manual_added = models.BooleanField(default=False)
class Meta:
verbose_name = "Post File"
verbose_name_plural = "Post Files"
def __str__(self):
return str(self.name.first())