7779544a249575ac1d472f5ab7c0c7c56ac91003 kent Thu Aug 29 16:54:41 2019 -0700 First committed cut of Human Cell Atlas Tracker (HCAT) - a Django based relational database and webworks aimed at helping track progress of projects being imported into the HCA-DCP. diff --git src/hca/hcat/mysite/hcat/models.py src/hca/hcat/mysite/hcat/models.py new file mode 100644 index 0000000..da2f110 --- /dev/null +++ src/hca/hcat/mysite/hcat/models.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import datetime +from django.db import models +from django.utils import timezone +from django.core.validators import MaxValueValidator, MinValueValidator + +class Contributor(models.Model): + name = models.CharField(max_length=250, unique=True) + email = models.EmailField(max_length=254, blank=True) + phone = models.CharField(max_length=25, blank=True) + project_role = models.CharField(max_length=100, default="contributor") + def __str__(self): + return self.name + +class Lab(models.Model): + short_name = models.CharField(max_length=50) + institution = models.CharField(max_length=250, blank="") + contributors = models.ManyToManyField(Contributor) + contact = models.ForeignKey(Contributor, null=True, default=None, on_delete=models.SET_NULL, related_name="contact") + pi = models.ForeignKey(Contributor, null=True, default=None, on_delete=models.SET_NULL, related_name="pi") + def __str__(self): + return self.short_name + +class Species(models.Model): + common_name = models.CharField(max_length = 40) + scientific_name = models.CharField(max_length=150) + ncbi_taxon = models.IntegerField() + def __str__(self): + return self.common_name + +class ProjectState(models.Model): + state = models.CharField(max_length=30) + description = models.CharField(max_length=100) + def __str__(self): + return self.state + +class OrganPart(models.Model): + short_name = models.CharField(max_length=50) + description = models.CharField(max_length=250) + def __str__(self): + return self.short_name + +class Organ(models.Model): + short_name = models.CharField(max_length=50) + description = models.CharField(max_length=250) + def __str__(self): + return self.short_name + +class Disease(models.Model): + short_name = models.CharField(max_length=50) + description = models.CharField(max_length=250) + def __str__(self): + return self.short_name + +class Consent(models.Model): + short_name = models.CharField(max_length=50) + description = models.CharField(max_length=250) + def __str__(self): + return self.short_name + +class SampleType(models.Model): + short_name = models.CharField(max_length=50) + description = models.CharField(max_length=250) + def __str__(self): + return self.short_name + +class Project(models.Model): + short_name = models.CharField(max_length=80) + state = models.ForeignKey(ProjectState, blank=True, null=True, default=None, on_delete=models.SET_NULL) + priority = models.IntegerField(blank=True,validators=[MinValueValidator(1),MaxValueValidator(5)], default=3) + wrangler1 = models.ForeignKey(Contributor, blank=True, null=True, default=None, on_delete=models.SET_NULL, related_name="wrangler1") + wrangler2 = models.ForeignKey(Contributor, blank=True, null=True, default=None, on_delete=models.SET_NULL, related_name="wrangler2") + title = models.CharField(max_length=120) + description = models.TextField() + labs = models.ManyToManyField(Lab, blank=True) + contributors = models.ManyToManyField(Contributor) + species = models.ManyToManyField(Species, blank=True) + organ = models.ManyToManyField(Organ, blank=True) + organ_part = models.ManyToManyField(OrganPart, blank=True) + disease = models.ManyToManyField(Disease, blank=True) + sample_type = models.ManyToManyField(SampleType, blank=True) + consent = models.ForeignKey(Consent, blank=True, null=True, default=None, on_delete=models.SET_NULL) + def __str__(self): + return self.short_name + +class Funder(models.Model): + short_name = models.CharField(max_length=50) + description = models.TextField() + def __str__(self): + return self.short_name + +class Grant(models.Model): + grant_title = models.CharField(max_length=200) + grant_id = models.CharField(max_length=200) + funder = models.ForeignKey(Funder, null=True, default=None, on_delete=models.SET_NULL) + funded_projects = models.ManyToManyField(Project, blank=True) + funded_labs = models.ManyToManyField(Lab, blank=True) + funded_contributors = models.ManyToManyField(Contributor, blank=True) + def __str__(self): + return self.grant_title +