31 lines
1.7 KiB
Python
31 lines
1.7 KiB
Python
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
||
|
from django.contrib.contenttypes.models import ContentType
|
||
|
from django.db import models
|
||
|
from django.utils.translation import gettext_lazy as _
|
||
|
|
||
|
from judge.models.profile import Profile
|
||
|
|
||
|
|
||
|
class Ticket(models.Model):
|
||
|
title = models.CharField(max_length=100, verbose_name=_('ticket title'))
|
||
|
user = models.ForeignKey(Profile, verbose_name=_('ticket creator'), related_name='tickets',
|
||
|
on_delete=models.CASCADE)
|
||
|
time = models.DateTimeField(verbose_name=_('creation time'), auto_now_add=True)
|
||
|
assignees = models.ManyToManyField(Profile, verbose_name=_('assignees'), related_name='assigned_tickets')
|
||
|
notes = models.TextField(verbose_name=_('quick notes'), blank=True,
|
||
|
help_text=_('Staff notes for this issue to aid in processing.'))
|
||
|
content_type = models.ForeignKey(ContentType, verbose_name=_('linked item type'),
|
||
|
on_delete=models.CASCADE)
|
||
|
object_id = models.PositiveIntegerField(verbose_name=_('linked item ID'))
|
||
|
linked_item = GenericForeignKey()
|
||
|
is_open = models.BooleanField(verbose_name=_('is ticket open?'), default=True)
|
||
|
|
||
|
|
||
|
class TicketMessage(models.Model):
|
||
|
ticket = models.ForeignKey(Ticket, verbose_name=_('ticket'), related_name='messages',
|
||
|
related_query_name='message', on_delete=models.CASCADE)
|
||
|
user = models.ForeignKey(Profile, verbose_name=_('poster'), related_name='ticket_messages',
|
||
|
on_delete=models.CASCADE)
|
||
|
body = models.TextField(verbose_name=_('message body'))
|
||
|
time = models.DateTimeField(verbose_name=_('message time'), auto_now_add=True)
|