attachment.py 974 B

123456789101112131415161718192021222324252627282930313233
  1. import os
  2. from django.db import models
  3. from django.conf import settings
  4. from tickets.models.ticket import Ticket
  5. def get_attachment_upload_dir(instance, filename):
  6. """Determine upload dir for ticket attachment files."""
  7. return "/".join(["attachments", str(instance.ticket.id), filename])
  8. class Attachment(models.Model):
  9. """
  10. Defines a generic file attachment for use in M2M relation with ticket.
  11. """
  12. ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
  13. added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
  14. timestamp = models.DateTimeField(auto_now_add=True)
  15. file = models.FileField(upload_to=get_attachment_upload_dir, max_length=255)
  16. def filename(self):
  17. return os.path.basename(self.file.name)
  18. def extension(self):
  19. name, extension = os.path.splitext(self.file.name)
  20. return extension
  21. def __str__(self):
  22. return f"{self.ticket.id} - {self.file.name}"