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}"