from django.core.exceptions import ObjectDoesNotExist from django.db.models import Model from django.shortcuts import render from rest_framework import viewsets, status from rest_framework.exceptions import ValidationError from rest_framework.generics import RetrieveUpdateDestroyAPIView, get_object_or_404 from rest_framework.response import Response from rest_framework.views import APIView from django.contrib.auth.models import User from apps.patient.models import Patient from apps.patient.serializers import PatientSerializer class PatientViewSet(viewsets.ModelViewSet): def get_queryset(self): user = self.request.user return Patient.objects.filter(owners=user) # queryset = Patient.objects.all().order_by('-created_date') # def get_object(self): # queryset = self.get_queryset() # filter = {} # for field in self.multiple_lookup_fields: # filter[field] = self.kwargs[field] # # obj = get_object_or_404(queryset, **filter) # self.check_object_permissions(self.request, obj) # return obj serializer_class = PatientSerializer # class PatientVS(RetrieveUpdateDestroyAPIView): # # def get_queryset(self): # user = self.request.user # # def get(self, request, *args, **kwargs): # user = request.user # patients = Patient.objects.filter(owners=user) # return patients class AddUserForPatient(APIView): def post(self, request): patient_id = request.data["patient_id"] username = request.data["username"] try: patient = Patient.objects.get(pk=patient_id) except ObjectDoesNotExist: raise ValidationError(detail="incorrect patient_id", code=status.HTTP_404_NOT_FOUND) try: user = User.objects.get(username=username) except ObjectDoesNotExist: raise ValidationError(detail="user not found", code=status.HTTP_404_NOT_FOUND) if request.user in patient.owners.all(): result = patient.owners.all() list_result = [entry for entry in result] list_result.append(user) patient.owners.set(set(list_result)) patient.save() serializer_context = { 'request': request, } serializer = PatientSerializer(patient, context=serializer_context) return Response(serializer.data) else: raise ValidationError(detail="FORBIDDEN", code=status.HTTP_403_FORBIDDEN)