54 lines
1.7 KiB
Python
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())
|