job and task details view
[qcg-portal.git] / qcg / models.py
index b9a35e5..6c25e3b 100644 (file)
@@ -1,5 +1,6 @@
 # coding=utf-8
 from django.contrib.auth.models import AbstractUser
 # coding=utf-8
 from django.contrib.auth.models import AbstractUser
+from django.core.urlresolvers import reverse
 from django.db import models
 from django.utils.timezone import now
 from pyqcg.service import Job as QcgJob, Task as QcgTask
 from django.db import models
 from django.utils.timezone import now
 from pyqcg.service import Job as QcgJob, Task as QcgTask
@@ -15,6 +16,10 @@ __all__ = ['User', 'Job', 'Task', 'Allocation', 'NodeInfo']
 class User(AbstractUser):
     last_update = models.DateTimeField(default=now)
 
 class User(AbstractUser):
     last_update = models.DateTimeField(default=now)
 
+    @property
+    def tasks(self):
+        return Task.objects.filter(job__owner=self)
+
 
 class Job(models.Model):
     STATUS_CHOICES = list(enumerate(field for field in dir(JobStatus) if not field.startswith('__')))
 
 class Job(models.Model):
     STATUS_CHOICES = list(enumerate(field for field in dir(JobStatus) if not field.startswith('__')))
@@ -27,10 +32,10 @@ class Job(models.Model):
     status = models.IntegerField(u"Status", choices=STATUS_CHOICES)
     note = models.TextField(u"Notatka", blank=True, default='')
     description = models.TextField(u"Opis", blank=True, default='')
     status = models.IntegerField(u"Status", choices=STATUS_CHOICES)
     note = models.TextField(u"Notatka", blank=True, default='')
     description = models.TextField(u"Opis", blank=True, default='')
+    project = models.TextField(u"Projekt", blank=True, default='')
     submission_time = models.DateTimeField(u"Data wysłania")
     finish_time = models.DateTimeField(u"Data zakończenia", blank=True, null=True)
     proxy_lifetime = TimedeltaField(u"Czas życia proxy", blank=True, null=True)
     submission_time = models.DateTimeField(u"Data wysłania")
     finish_time = models.DateTimeField(u"Data zakończenia", blank=True, null=True)
     proxy_lifetime = TimedeltaField(u"Czas życia proxy", blank=True, null=True)
-    project = models.TextField(u"Projekt", blank=True, default='')
     purged = models.BooleanField(u"Usunięty katalog roboczy?", default=False)
 
     owner = models.ForeignKey(User, verbose_name=u"Właściciel", related_name='jobs')
     purged = models.BooleanField(u"Usunięty katalog roboczy?", default=False)
 
     owner = models.ForeignKey(User, verbose_name=u"Właściciel", related_name='jobs')
@@ -45,6 +50,9 @@ class Job(models.Model):
     def __unicode__(self):
         return self.job_id
 
     def __unicode__(self):
         return self.job_id
 
+    def get_absolute_url(self):
+        return reverse('job', kwargs={'job_id': self.job_id})
+
     @property
     def qcg_job(self):
         if self._job is None:
     @property
     def qcg_job(self):
         if self._job is None:
@@ -115,6 +123,9 @@ class Task(models.Model):
     def __unicode__(self):
         return u'{}/{}'.format(self.job, self.task_id)
 
     def __unicode__(self):
         return u'{}/{}'.format(self.job, self.task_id)
 
+    def get_absolute_url(self):
+        return reverse('task', kwargs={'job_id': self.job.job_id, 'task_id': self.task_id})
+
     @property
     def qcg_task(self):
         if self._qcg_task is None:
     @property
     def qcg_task(self):
         if self._qcg_task is None: