Untitled
user_7854577
plain_text
4 months ago
6.7 kB
3
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