Add model definitions
This commit is contained in:
parent
5169f5033c
commit
cbca55ff49
127
core/models.py
127
core/models.py
|
@ -6,6 +6,53 @@ from django.db import models
|
|||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
SITE_CHOICES = (
|
||||
("5HT2C", "5-HT2C"),
|
||||
("5HT2A", "5-HT2A"),
|
||||
("GABAB", "GABAB"),
|
||||
("NMDA", "NMDA"),
|
||||
)
|
||||
|
||||
MECHANISM_CHOICES = (
|
||||
("AGONISM", "Agonism"),
|
||||
("ANTAGONISM", "Antagomism"),
|
||||
("MODULATION", "Modulation"),
|
||||
)
|
||||
|
||||
SOURCE_TYPE_CHOICES = (
|
||||
("PSITE", "Professional pharmaceutical data repository"),
|
||||
("DWIKI", "Dedicated peer-reviewed community wiki"),
|
||||
("CWIKI", "Peer-reviewed community wiki"),
|
||||
("WIKI", "Private wiki"),
|
||||
("DFORUM", "Dedicated community forum"),
|
||||
("FORUM", "Community forum"),
|
||||
)
|
||||
|
||||
DOSAGE_UNIT_CHOICES = (
|
||||
("mg", "mg"),
|
||||
("g", "g"),
|
||||
("ug", "ug"),
|
||||
)
|
||||
|
||||
DOSAGE_TIMING_CHOICES = (
|
||||
("SECONDS", "Seconds"),
|
||||
("MINUTES", "Minutes"),
|
||||
("HOURS", "Hours"),
|
||||
("DAYS", "Days :D"),
|
||||
("WEEKS", "Weeks :O"),
|
||||
("MONTHS", "Months :-|"),
|
||||
("YEARS", "Years x_X"),
|
||||
)
|
||||
|
||||
SEI_TYPE_CHOICES = (
|
||||
("PHYSICAL", "Physical"),
|
||||
("COGNITIVE", "Cognitive"),
|
||||
("VISUAL", "Visual"),
|
||||
("AUDITORY", "Auditory"),
|
||||
("MULTISENSORY", "Multi-sensory"),
|
||||
("TRANSPERSONAL", "Transpersonal"),
|
||||
)
|
||||
|
||||
|
||||
class User(AbstractUser):
|
||||
# Stripe customer ID
|
||||
|
@ -31,6 +78,86 @@ class NotificationSettings(models.Model):
|
|||
return f"Notification settings for {self.user}"
|
||||
|
||||
|
||||
class Source(models.Model):
|
||||
name = models.CharField(max_length=255, unique=True)
|
||||
type = models.CharField(max_length=255, choices=SOURCE_TYPE_CHOICES)
|
||||
endpoint = models.CharField(max_length=1024, blank=True, null=True)
|
||||
score = models.IntegerField(blank=True)
|
||||
|
||||
|
||||
class Entry(models.Model):
|
||||
source = models.ForeignKey(Source)
|
||||
slug = models.CharField(max_length=1024)
|
||||
|
||||
|
||||
class Dosage(models.Model):
|
||||
entry = models.ForeignKey("core.Entry")
|
||||
unit = models.CharField(max_length=255, choices=DOSAGE_UNIT_CHOICES)
|
||||
threshold = models.IntegerField()
|
||||
light = models.IntegerField()
|
||||
common = models.IntegerField()
|
||||
strong = models.IntegerField()
|
||||
heavy = models.IntegerField()
|
||||
|
||||
|
||||
class Timing(models.Model):
|
||||
entry = models.ForeignKey("core.Entry")
|
||||
unit = models.CharField(
|
||||
max_length=255, choices=DOSAGE_TIMING_CHOICES, default="HOURS"
|
||||
)
|
||||
onset = models.IntegerField()
|
||||
comeup = models.IntegerField()
|
||||
peak = models.IntegerField()
|
||||
total = models.IntegerField()
|
||||
|
||||
|
||||
class SEI(models.Model):
|
||||
"""
|
||||
Subjective Effect Index from Psychonaut Wiki.
|
||||
"""
|
||||
|
||||
type = models.CharField(
|
||||
max_length=255, choices=SEI_TYPE_CHOICES, default="PHYSICAL"
|
||||
)
|
||||
description = models.CharField(max_length=4096, blank=True, null=True)
|
||||
|
||||
|
||||
class Effect(models.Model):
|
||||
entry = models.ForeignKey("core.Entry")
|
||||
subjective_effects = models.ManyToManyField(SEI)
|
||||
|
||||
|
||||
class Action(models.Model):
|
||||
"""
|
||||
Site action record for a drug.
|
||||
"""
|
||||
|
||||
site = models.CharField(max_length=255, choices=SITE_CHOICES)
|
||||
mechanism = models.CharField(max_length=255, choices=MECHANISM_CHOICES)
|
||||
affinity = models.IntegerField(blank=True)
|
||||
|
||||
|
||||
class Drug(models.Model):
|
||||
"""
|
||||
Model of a drug. Not open to interpretation.
|
||||
"""
|
||||
|
||||
# Lysergic acid diethylamide, Phenibut
|
||||
name = models.CharField(max_length=255, unique=True)
|
||||
|
||||
# Psychedelic, Sedative
|
||||
drug_class = models.CharField(max_length=255)
|
||||
|
||||
# LSD
|
||||
common_name = models.CharField(max_length=1024, unique=True)
|
||||
|
||||
links = models.ManyToManyField(Entry)
|
||||
dosages = models.ManyToManyField(Dosage)
|
||||
timings = models.ManyToManyField(Timing)
|
||||
effects = models.ManyToManyField(Effect)
|
||||
actions = models.ManyToManyField(Action)
|
||||
|
||||
|
||||
# class Perms(models.Model):
|
||||
# class Meta:
|
||||
# permissions = (
|
||||
|
|
Loading…
Reference in New Issue