From 39c456b34360d1d4d9e7f79a88ebb64d52cd75a5 Mon Sep 17 00:00:00 2001 From: Dustin Kroeger Date: Mon, 11 Mar 2024 01:19:31 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=A6=20NEW:=20Add=20FileAttachment=20mo?= =?UTF-8?q?del?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- ticketing/admin.py | 3 +- ticketing/migrations/0010_fileattachment.py | 42 +++++++++++++++++++ .../0011_alter_fileattachment_file.py | 21 ++++++++++ ticketing/models.py | 19 ++++++++- 5 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 ticketing/migrations/0010_fileattachment.py create mode 100644 ticketing/migrations/0011_alter_fileattachment_file.py diff --git a/.gitignore b/.gitignore index 2b56264..37c83f4 100644 --- a/.gitignore +++ b/.gitignore @@ -156,4 +156,4 @@ node_modules static/admin static/colorfield -media/profile_pics \ No newline at end of file +media/* \ No newline at end of file diff --git a/ticketing/admin.py b/ticketing/admin.py index b64c763..39bff25 100644 --- a/ticketing/admin.py +++ b/ticketing/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Category, Ticket, Comment, Template, Team +from .models import Category, Ticket, Comment, Template, Team, FileAttachment # Register your models here. admin.site.register(Category) @@ -7,3 +7,4 @@ admin.site.register(Ticket) admin.site.register(Comment) admin.site.register(Template) admin.site.register(Team) +admin.site.register(FileAttachment) diff --git a/ticketing/migrations/0010_fileattachment.py b/ticketing/migrations/0010_fileattachment.py new file mode 100644 index 0000000..681060b --- /dev/null +++ b/ticketing/migrations/0010_fileattachment.py @@ -0,0 +1,42 @@ +# Generated by Django 5.0.3 on 2024-03-10 23:30 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("ticketing", "0009_ticket_follow_up_to_alter_category_team"), + ] + + operations = [ + migrations.CreateModel( + name="FileAttachment", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "file", + models.FileField( + upload_to="attachments/" + ), + ), + ("uploaded_at", models.DateTimeField(auto_now_add=True)), + ( + "ticket", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="ticketing.ticket", + ), + ), + ], + ), + ] diff --git a/ticketing/migrations/0011_alter_fileattachment_file.py b/ticketing/migrations/0011_alter_fileattachment_file.py new file mode 100644 index 0000000..8f08447 --- /dev/null +++ b/ticketing/migrations/0011_alter_fileattachment_file.py @@ -0,0 +1,21 @@ +# Generated by Django 5.0.3 on 2024-03-11 00:06 + +import ticketing.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("ticketing", "0010_fileattachment"), + ] + + operations = [ + migrations.AlterField( + model_name="fileattachment", + name="file", + field=models.FileField( + max_length=255, upload_to=ticketing.models.ticket_directory_path + ), + ), + ] diff --git a/ticketing/models.py b/ticketing/models.py index 9c5f2aa..746eb69 100644 --- a/ticketing/models.py +++ b/ticketing/models.py @@ -4,6 +4,13 @@ from django.utils import timezone from django.utils.translation import gettext_lazy as _ from django.db.models.signals import post_save from django.dispatch import receiver +from uuid import uuid4 + + +def ticket_directory_path(instance, filename): + """ file will be uploaded to MEDIA_ROOT/ticket_/ """ + ext = filename.split('.')[-1] + return "attachments/ticket_{0}/{1}.{2}".format(instance.ticket.id, uuid4(), ext) class Team(models.Model): @@ -18,7 +25,7 @@ class Team(models.Model): class Category(models.Model): name = models.CharField(max_length=200) team = models.ForeignKey( - Team, on_delete=models.CASCADE, null=True, blank=True, help_text="If a team is selected, new tickets will automatically assigned to this team.") + Team, on_delete=models.CASCADE, null=True, blank=True, help_text=_("If a team is selected, new tickets will automatically assigned to this team.")) def __str__(self): return self.name @@ -104,6 +111,16 @@ class Comment(models.Model): return f'Comment by {self.user.username} on {self.ticket.title}' +class FileAttachment(models.Model): + ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE) + file = models.FileField( + upload_to=ticket_directory_path, max_length=255) + uploaded_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f'{_('Attachment for')} {self.ticket.title}' + + class Template(models.Model): name = models.CharField(max_length=200) content = models.TextField() -- 2.51.2