62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
import os
|
|
import uuid
|
|
from django.db import models
|
|
from core.models.base import Image
|
|
from core.models.session import ServiceSession, ProjectSession
|
|
|
|
|
|
def _service_session_upload_to(instance: "ServiceSessionImage", filename: str) -> str:
|
|
base, ext = os.path.splitext(filename)
|
|
ext = ext.lower() or ".jpg"
|
|
sid = instance.service_session_id or "unassigned"
|
|
return f"uploads/service_session/{sid}/{uuid.uuid4().hex}{ext}"
|
|
|
|
|
|
def _service_session_thumb_upload_to(instance: "ServiceSessionImage", _filename: str) -> str:
|
|
sid = instance.service_session_id or "unassigned"
|
|
return f"uploads/service_session/{sid}/thumb/{uuid.uuid4().hex}.jpg"
|
|
|
|
|
|
def _project_session_upload_to(instance: "ProjectSessionImage", filename: str) -> str:
|
|
base, ext = os.path.splitext(filename)
|
|
ext = ext.lower() or ".jpg"
|
|
sid = instance.project_session_id or "unassigned"
|
|
return f"uploads/project_session/{sid}/{uuid.uuid4().hex}{ext}"
|
|
|
|
|
|
def _project_session_thumb_upload_to(instance: "ProjectSessionImage", _filename: str) -> str:
|
|
sid = instance.project_session_id or "unassigned"
|
|
return f"uploads/project_session/{sid}/thumb/{uuid.uuid4().hex}.jpg"
|
|
|
|
|
|
class ServiceSessionImage(Image):
|
|
service_session = models.ForeignKey(ServiceSession, on_delete=models.PROTECT, related_name='service_session_images')
|
|
image = models.ImageField(upload_to=_service_session_upload_to)
|
|
thumbnail = models.ImageField(upload_to=_service_session_thumb_upload_to, blank=True, null=True)
|
|
|
|
def __str__(self) -> str:
|
|
return self.title or f"ServiceSessionImage {self.id}"
|
|
|
|
class Meta:
|
|
ordering = ('-created_at',)
|
|
indexes = [
|
|
models.Index(fields=['service_session', 'created_at']),
|
|
models.Index(fields=['created_at']),
|
|
]
|
|
|
|
|
|
class ProjectSessionImage(Image):
|
|
project_session = models.ForeignKey(ProjectSession, on_delete=models.PROTECT, related_name='project_session_images')
|
|
image = models.ImageField(upload_to=_project_session_upload_to)
|
|
thumbnail = models.ImageField(upload_to=_project_session_thumb_upload_to, blank=True, null=True)
|
|
|
|
def __str__(self) -> str:
|
|
return self.title or f"ProjectSessionImage {self.id}"
|
|
|
|
class Meta:
|
|
ordering = ('-created_at',)
|
|
indexes = [
|
|
models.Index(fields=['project_session', 'created_at']),
|
|
models.Index(fields=['created_at']),
|
|
]
|