tangled
alpha
login
or
join now
aottr.dev
/
paw
0
fork
atom
Free and open source ticket system written in python
0
fork
atom
overview
issues
pulls
pipelines
📦 NEW: Add FileAttachment model
Dustin Kroeger
2 years ago
39c456b3
da122c67
+84
-3
5 changed files
expand all
collapse all
unified
split
.gitignore
ticketing
admin.py
migrations
0010_fileattachment.py
0011_alter_fileattachment_file.py
models.py
+1
-1
.gitignore
···
156
156
157
157
static/admin
158
158
static/colorfield
159
159
-
media/profile_pics
159
159
+
media/*
+2
-1
ticketing/admin.py
···
1
1
from django.contrib import admin
2
2
-
from .models import Category, Ticket, Comment, Template, Team
2
2
+
from .models import Category, Ticket, Comment, Template, Team, FileAttachment
3
3
4
4
# Register your models here.
5
5
admin.site.register(Category)
···
7
7
admin.site.register(Comment)
8
8
admin.site.register(Template)
9
9
admin.site.register(Team)
10
10
+
admin.site.register(FileAttachment)
+42
ticketing/migrations/0010_fileattachment.py
···
1
1
+
# Generated by Django 5.0.3 on 2024-03-10 23:30
2
2
+
3
3
+
import django.db.models.deletion
4
4
+
from django.db import migrations, models
5
5
+
6
6
+
7
7
+
class Migration(migrations.Migration):
8
8
+
9
9
+
dependencies = [
10
10
+
("ticketing", "0009_ticket_follow_up_to_alter_category_team"),
11
11
+
]
12
12
+
13
13
+
operations = [
14
14
+
migrations.CreateModel(
15
15
+
name="FileAttachment",
16
16
+
fields=[
17
17
+
(
18
18
+
"id",
19
19
+
models.BigAutoField(
20
20
+
auto_created=True,
21
21
+
primary_key=True,
22
22
+
serialize=False,
23
23
+
verbose_name="ID",
24
24
+
),
25
25
+
),
26
26
+
(
27
27
+
"file",
28
28
+
models.FileField(
29
29
+
upload_to="attachments/<ticketing.models.file_prefix object at 0x1043b6ed0>"
30
30
+
),
31
31
+
),
32
32
+
("uploaded_at", models.DateTimeField(auto_now_add=True)),
33
33
+
(
34
34
+
"ticket",
35
35
+
models.ForeignKey(
36
36
+
on_delete=django.db.models.deletion.CASCADE,
37
37
+
to="ticketing.ticket",
38
38
+
),
39
39
+
),
40
40
+
],
41
41
+
),
42
42
+
]
+21
ticketing/migrations/0011_alter_fileattachment_file.py
···
1
1
+
# Generated by Django 5.0.3 on 2024-03-11 00:06
2
2
+
3
3
+
import ticketing.models
4
4
+
from django.db import migrations, models
5
5
+
6
6
+
7
7
+
class Migration(migrations.Migration):
8
8
+
9
9
+
dependencies = [
10
10
+
("ticketing", "0010_fileattachment"),
11
11
+
]
12
12
+
13
13
+
operations = [
14
14
+
migrations.AlterField(
15
15
+
model_name="fileattachment",
16
16
+
name="file",
17
17
+
field=models.FileField(
18
18
+
max_length=255, upload_to=ticketing.models.ticket_directory_path
19
19
+
),
20
20
+
),
21
21
+
]
+18
-1
ticketing/models.py
···
4
4
from django.utils.translation import gettext_lazy as _
5
5
from django.db.models.signals import post_save
6
6
from django.dispatch import receiver
7
7
+
from uuid import uuid4
8
8
+
9
9
+
10
10
+
def ticket_directory_path(instance, filename):
11
11
+
""" file will be uploaded to MEDIA_ROOT/ticket_<id>/<filename> """
12
12
+
ext = filename.split('.')[-1]
13
13
+
return "attachments/ticket_{0}/{1}.{2}".format(instance.ticket.id, uuid4(), ext)
7
14
8
15
9
16
class Team(models.Model):
···
18
25
class Category(models.Model):
19
26
name = models.CharField(max_length=200)
20
27
team = models.ForeignKey(
21
21
-
Team, on_delete=models.CASCADE, null=True, blank=True, help_text="If a team is selected, new tickets will automatically assigned to this team.")
28
28
+
Team, on_delete=models.CASCADE, null=True, blank=True, help_text=_("If a team is selected, new tickets will automatically assigned to this team."))
22
29
23
30
def __str__(self):
24
31
return self.name
···
102
109
103
110
def __str__(self):
104
111
return f'Comment by {self.user.username} on {self.ticket.title}'
112
112
+
113
113
+
114
114
+
class FileAttachment(models.Model):
115
115
+
ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
116
116
+
file = models.FileField(
117
117
+
upload_to=ticket_directory_path, max_length=255)
118
118
+
uploaded_at = models.DateTimeField(auto_now_add=True)
119
119
+
120
120
+
def __str__(self):
121
121
+
return f'{_('Attachment for')} {self.ticket.title}'
105
122
106
123
107
124
class Template(models.Model):