Untitled
user_7854577
plain_text
a year ago
6.7 kB
4
Indexable
# patient_management/models.py
from django.db import models
from user_management.models import User
from doctor_management.models import DoctorProfile
from room_management.models import Room # Assuming Room is defined in room_management
class PatientProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='patient_profile')
date_of_birth = models.DateField()
address = models.TextField()
contact_number = models.CharField(max_length=15)
emergency_contact = models.CharField(max_length=15)
medical_history = models.TextField(blank=True, null=True)
assigned_doctor = models.ForeignKey(DoctorProfile, on_delete=models.SET_NULL, null=True, blank=True, related_name='patients')
class Admission(models.Model):
patient = models.ForeignKey(PatientProfile, on_delete=models.CASCADE, related_name='admissions')
admission_date = models.DateTimeField(auto_now_add=True)
discharge_date = models.DateTimeField(blank=True, null=True)
reason = models.TextField()
room = models.ForeignKey(Room, on_delete=models.SET_NULL, null=True, blank=True, related_name='admissions')
class AppointmentBooking(models.Model):
patient = models.ForeignKey(PatientProfile, on_delete=models.CASCADE, related_name='appointments')
doctor = models.ForeignKey(DoctorProfile, on_delete=models.CASCADE, related_name='booked_appointments')
appointment_date = models.DateTimeField()
symptoms = models.TextField()
# patient_management/serializers.py
from rest_framework import serializers
from .models import PatientProfile, Admission, AppointmentBooking
class PatientProfileSerializer(serializers.ModelSerializer):
class Meta:
model = PatientProfile
fields = ['id', 'user', 'date_of_birth', 'address', 'contact_number', 'emergency_contact', 'medical_history', 'assigned_doctor']
depth = 1
class AdmissionSerializer(serializers.ModelSerializer):
class Meta:
model = Admission
fields = ['id', 'patient', 'admission_date', 'discharge_date', 'reason', 'room']
class AppointmentBookingSerializer(serializers.ModelSerializer):
class Meta:
model = AppointmentBooking
fields = ['id', 'patient', 'doctor', 'appointment_date', 'symptoms']
# patient_management/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework import status
from .models import PatientProfile, Admission, AppointmentBooking
from .serializers import PatientProfileSerializer, AdmissionSerializer, AppointmentBookingSerializer
class PatientProfileView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request):
if request.user.role != 'Patient':
return Response({'error': 'Only patients can access this resource.'}, status=status.HTTP_403_FORBIDDEN)
try:
patient_profile = PatientProfile.objects.get(user=request.user)
serializer = PatientProfileSerializer(patient_profile)
return Response(serializer.data)
except PatientProfile.DoesNotExist:
return Response({'error': 'Profile not found.'}, status=status.HTTP_404_NOT_FOUND)
def post(self, request):
if request.user.role != 'Patient':
return Response({'error': 'Only patients can create their profiles.'}, status=status.HTTP_403_FORBIDDEN)
serializer = PatientProfileSerializer(data=request.data)
if serializer.is_valid():
serializer.save(user=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class AdmissionManagementView(APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
if request.user.role != 'Patient':
return Response({'error': 'Only patients can admit themselves.'}, status=status.HTTP_403_FORBIDDEN)
serializer = AdmissionSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get(self, request):
if request.user.role != 'Patient':
return Response({'error': 'Only patients can view their admissions.'}, status=status.HTTP_403_FORBIDDEN)
try:
patient_profile = PatientProfile.objects.get(user=request.user)
admissions = patient_profile.admissions.all()
serializer = AdmissionSerializer(admissions, many=True)
return Response(serializer.data)
except PatientProfile.DoesNotExist:
return Response({'error': 'Profile not found.'}, status=status.HTTP_404_NOT_FOUND)
class AppointmentBookingView(APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
if request.user.role != 'Patient':
return Response({'error': 'Only patients can book appointments.'}, status=status.HTTP_403_FORBIDDEN)
serializer = AppointmentBookingSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get(self, request):
if request.user.role != 'Patient':
return Response({'error': 'Only patients can view their appointments.'}, status=status.HTTP_403_FORBIDDEN)
try:
patient_profile = PatientProfile.objects.get(user=request.user)
appointments = patient_profile.appointments.all()
serializer = AppointmentBookingSerializer(appointments, many=True)
return Response(serializer.data)
except PatientProfile.DoesNotExist:
return Response({'error': 'Profile not found.'}, status=status.HTTP_404_NOT_FOUND)
# patient_management/urls.py
from django.urls import path
from .views import PatientProfileView, AdmissionManagementView, AppointmentBookingView
urlpatterns = [
path('profile/', PatientProfileView.as_view(), name='patient_profile'),
path('admissions/', AdmissionManagementView.as_view(), name='admission_management'),
path('appointments/', AppointmentBookingView.as_view(), name='appointment_booking'),
]
# settings.py (additional INSTALLED_APPS configuration)
INSTALLED_APPS += [
'patient_management',
]
Editor is loading...
Leave a Comment