1
|
|
|
# Copyright (c) 2019 Alexander Todorov <[email protected]> |
2
|
|
|
|
3
|
|
|
# Licensed under the GPL 2.0: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html |
4
|
|
|
|
5
|
|
|
from django.db import models |
6
|
|
|
from django.conf import settings |
7
|
|
|
from django.urls import reverse |
8
|
|
|
|
9
|
|
|
from tcms.core.models.base import UrlMixin |
10
|
|
|
|
11
|
|
|
|
12
|
|
|
class Bug(models.Model, UrlMixin): |
13
|
|
|
summary = models.CharField(max_length=255, db_index=True) |
14
|
|
|
created_at = models.DateTimeField(auto_now_add=True, |
15
|
|
|
db_index=True) |
16
|
|
|
# True means bug is still open |
17
|
|
|
status = models.BooleanField(default=True, db_index=True) |
18
|
|
|
|
19
|
|
|
reporter = models.ForeignKey(settings.AUTH_USER_MODEL, |
20
|
|
|
on_delete=models.CASCADE, |
21
|
|
|
related_name='repoted_bugs') |
22
|
|
|
assignee = models.ForeignKey(settings.AUTH_USER_MODEL, |
23
|
|
|
on_delete=models.CASCADE, |
24
|
|
|
related_name='assigned_bugs', |
25
|
|
|
null=True, |
26
|
|
|
blank=True) |
27
|
|
|
|
28
|
|
|
product = models.ForeignKey('management.Product', on_delete=models.CASCADE) |
29
|
|
|
version = models.ForeignKey('management.Version', on_delete=models.CASCADE) |
30
|
|
|
build = models.ForeignKey('management.Build', on_delete=models.CASCADE) |
31
|
|
|
|
32
|
|
|
executions = models.ManyToManyField('testruns.TestExecution', related_name='bugs') |
33
|
|
|
tags = models.ManyToManyField('management.Tag', related_name='bugs') |
34
|
|
|
|
35
|
|
|
def __str__(self): |
36
|
|
|
return "BUG-%d: %s " % (self.pk, self.summary) |
37
|
|
|
|
38
|
|
|
def _get_absolute_url(self): |
39
|
|
|
return reverse('bugs-get', args=[self.pk, ]) |
40
|
|
|
|
41
|
|
|
def get_absolute_url(self): |
42
|
|
|
return self._get_absolute_url() |
43
|
|
|
|