Files
2024-11-27 13:18:16 +01:00

64 lines
1.9 KiB
Python
Executable File

import os
from django.db import models
from django.utils.deconstruct import deconstructible
from rules.contrib.models import RulesModel
from outbo.apps.core.models import TimestampableDeletableMixin
from outbo.apps.final_photobriefing import rules
from outbo.apps.final_photobriefing.enums import PhotoType
@deconstructible
class FormatFinalPhotoBriefPhotoFilename:
def __call__(self, instance, filename):
obj = instance.brief.brief
return "/".join(
("projects", obj.product.project.slug[1:], "final-photobriefing", filename)
)
class FinalBrief(TimestampableDeletableMixin, RulesModel):
class Meta:
rules_permissions = {
"add": rules.can_create_final_brief,
"view": rules.can_read_final_brief,
"change": rules.can_update_final_brief,
"delete": rules.can_delete_final_brief,
}
brief = models.OneToOneField(
to="photobriefing.Brief",
on_delete=models.CASCADE,
related_name="final",
related_query_name="final",
primary_key=True,
)
class FinalBriefPhoto(TimestampableDeletableMixin, RulesModel):
class Meta:
rules_permissions = {
"add": rules.can_create_final_brief_photo,
"view": rules.can_read_final_brief_photo,
"change": rules.can_update_final_brief_photo,
"delete": rules.can_delete_final_brief_photo,
}
brief = models.ForeignKey(
to=FinalBrief,
on_delete=models.CASCADE,
related_query_name="photo",
related_name="photos",
)
file = models.FileField(upload_to=FormatFinalPhotoBriefPhotoFilename())
type = models.CharField(
max_length=30,
choices=[(type, type.value) for type in PhotoType],
default=PhotoType.INVALID,
)
@property
def filename(self):
return os.path.basename(self.file.name)