1 from django.db import models
3 # Create your models here.
5 EXP_TYPES = [('RNASeq', 'RNASeq'),
7 ('DeNovoSeq','DeNovoSeq'),
8 ('MethylSeq','MethylSeq')]
9 FREEZER_BUILDINGS = [('Kerckhoff', 'Kerckhoff')]
12 class Owner(models.Model):
13 name = models.CharField(max_length=32)
15 def __unicode__(self):
16 return u'%s' % (self.name)
19 class Freezer(models.Model):
20 name = models.CharField(max_length=256)
21 building = models.CharField(max_length=256, choices=FREEZER_BUILDINGS,
22 default=FREEZER_BUILDINGS[0][0])
23 loc_desc = models.CharField(max_length=256, blank=True, null=True)
24 temperature = models.FloatField(help_text='Celsius')
26 uuid = models.CharField(max_length=32, unique=True)
28 def __unicode__(self):
29 return u'%s (%s; %sC)' % (self.name, self.building, self.temperature)
32 def get_absolute_url(self):
33 return ('samplebc.samples.views.freezer_summary', [str(self.uuid)])
36 class SampleType(models.Model):
37 name = models.CharField(max_length=256)
39 def __unicode__(self):
40 return u'%s' % (self.name)
43 class Container(models.Model):
44 name = models.CharField(max_length=256)
45 sample_type = models.ManyToManyField(SampleType)
46 max_items = models.IntegerField()
47 freezer = models.ForeignKey(Freezer)
49 uuid = models.CharField(max_length=32, unique=True)
51 def __unicode__(self):
52 return u'%s (spc: %s)' % (self.name, self.space_available())
55 def get_absolute_url(self):
56 return ('samplebc.samples.views.container_summary', [str(self.uuid)])
58 def space_available(self):
60 returns the space available for the container
62 return (self.max_items - self.sample_set.count())
65 class Sample(models.Model):
66 name = models.CharField(max_length=256)
67 sampleid = models.CharField(max_length=64, unique=True)
68 sample_type = models.ForeignKey(SampleType)
69 owner = models.ForeignKey(Owner)
70 # Concentration in ng/ul
71 concentration = models.FloatField(help_text='ng/ul', blank=True, null=True)
72 volume = models.FloatField(help_text='ul', blank=True, null=True)
73 container = models.ForeignKey(Container, blank=True, null=True)
75 def __unicode__(self):
76 return u's|%s|%s' % (self.sampleid, self.owner.name)
79 def get_absolute_url(self):
80 return ('samplebc.samples.views.sample_summary', [str(self.sampleid)])