RespireX-Prototype / api /models.py
CineDev's picture
Update api/models.py
911701e verified
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
ROLE_CHOICES = (('patient', 'Patient'), ('doctor', 'Doctor'))
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
role = models.CharField(max_length=10, choices=ROLE_CHOICES)
# Common fields
# --- NEW FIELDS ADDED HERE ---
full_name = models.CharField(max_length=200, blank=True)
phone = models.CharField(max_length=20, blank=True)
address = models.TextField(blank=True)
# -----------------------------
state = models.CharField(max_length=100, blank=True)
city = models.CharField(max_length=100, blank=True)
# Doctor specific
license_number = models.CharField(max_length=50, blank=True, null=True)
# Patient specific
age = models.IntegerField(null=True, blank=True)
gender = models.CharField(max_length=20, blank=True)
def __str__(self):
return f"{self.user.username} - {self.role}"
class TestResult(models.Model):
RESULT_CHOICES = (('Positive', 'Positive'), ('Negative', 'Negative'))
RISK_CHOICES = (('High', 'High'), ('Medium', 'Medium'), ('Low', 'Low'))
patient = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='test_results')
xray_image_url = models.URLField()
date_tested = models.DateTimeField(auto_now_add=True)
# Prediction Data
result = models.CharField(max_length=20, choices=RESULT_CHOICES)
confidence_score = models.FloatField()
risk_level = models.CharField(max_length=20, choices=RISK_CHOICES)
# Storing symptoms as a JSON object for flexibility
symptoms_data = models.JSONField(default=dict)
def __str__(self):
return f"{self.patient.user.username} - {self.result} ({self.date_tested})"
class Appointment(models.Model):
STATUS_CHOICES = (
('Pending', 'Pending'),
('Confirmed', 'Confirmed'),
('Completed', 'Completed'),
('Cancelled', 'Cancelled'),
)
patient = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='appointments_as_patient')
doctor = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='appointments_as_doctor')
date = models.DateField()
time = models.TimeField()
reason = models.TextField(blank=True)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='Pending')
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.patient.full_name} with {self.doctor.full_name} on {self.date}"