11from uuid import UUID
22
3- from django .conf import settings
4- from django .db .models import CharField , F , Value
3+ from django .db .models import F , Value , CharField
54from django .db .models .functions import Concat
65from django .http import HttpResponse
76from django .shortcuts import get_object_or_404
87from django .utils .html import escape
98from django_filters .rest_framework import DjangoFilterBackend
10- from drf_spectacular .utils import OpenApiResponse , extend_schema
9+ from drf_spectacular .utils import extend_schema , OpenApiResponse
1110from rest_framework import viewsets
12- from rest_framework .filters import OrderingFilter , SearchFilter
11+ from rest_framework .views import APIView
1312from rest_framework .renderers import BrowsableAPIRenderer
1413from rest_framework .response import Response
15- from rest_framework .views import APIView
14+ from rest_framework .filters import SearchFilter , OrderingFilter
15+
16+ from .pagination import CustomPaginator
17+ from .renderers import FHIRRenderer
1618
1719from .filters .endpoint_filter_set import EndpointFilterSet
1820from .filters .location_filter_set import LocationFilterSet
1921from .filters .organization_filter_set import OrganizationFilterSet
2022from .filters .practitioner_filter_set import PractitionerFilterSet
2123from .filters .practitioner_role_filter_set import PractitionerRoleFilterSet
24+
2225from .models import (
2326 EndpointInstance ,
2427 Location ,
2528 Organization ,
2629 Provider ,
2730 ProviderToLocation ,
2831)
29- from .pagination import CustomPaginator
30- from .renderers import FHIRRenderer
32+
3133from .serializers import (
3234 BundleSerializer ,
33- CapabilityStatementSerializer ,
3435 EndpointSerializer ,
3536 LocationSerializer ,
3637 OrganizationSerializer ,
3738 PractitionerRoleSerializer ,
3839 PractitionerSerializer ,
40+ CapabilityStatementSerializer ,
3941)
4042
43+ from django .conf import settings
44+
4145DEBUG = settings .DEBUG
4246
4347
@@ -68,6 +72,7 @@ class FHIREndpointViewSet(viewsets.GenericViewSet):
6872 ordering_fields = ["name" , "address" , "ehr_vendor_name" ]
6973 pagination_class = CustomPaginator
7074 pagination_class = CustomPaginator
75+ lookup_url_kwarg = "id"
7176
7277 @extend_schema (
7378 responses = {
@@ -113,15 +118,15 @@ def list(self, request):
113118 200 : OpenApiResponse (description = "Successfully retrieved FHIR Endpoint resource" )
114119 }
115120 )
116- def retrieve (self , request , pk = None ):
121+ def retrieve (self , request , id = None ):
117122 """
118123 Query a specific endpoint as a FHIR Endpoint resource
119124 """
120125
121126 try :
122- UUID (pk )
127+ UUID (id )
123128 except (ValueError , TypeError ):
124- return HttpResponse (f"Endpoint { escape (pk )} not found" , status = 404 )
129+ return HttpResponse (f"Endpoint { escape (id )} not found" , status = 404 )
125130
126131 endpoint = get_object_or_404 (
127132 EndpointInstance .objects .prefetch_related (
@@ -132,7 +137,7 @@ def retrieve(self, request, pk=None):
132137 "endpointinstancetopayload_set__mime_type" ,
133138 "endpointinstancetootherid_set" ,
134139 ),
135- pk = pk ,
140+ id = id ,
136141 )
137142
138143 serialized_endpoint = EndpointSerializer (endpoint , context = {"request" : request })
@@ -156,6 +161,7 @@ class FHIRPractitionerViewSet(viewsets.GenericViewSet):
156161 filter_backends = [DjangoFilterBackend , SearchFilter , ParamOrderingFilter ]
157162 filterset_class = PractitionerFilterSet
158163 pagination_class = CustomPaginator
164+ lookup_url_kwarg = "id"
159165
160166 ordering_fields = [
161167 "individual__individualtoname__last_name" ,
@@ -213,14 +219,14 @@ def list(self, request):
213219 200 : OpenApiResponse (description = "Successfully retrieved FHIR Practitioner resource" )
214220 }
215221 )
216- def retrieve (self , request , pk = None ):
222+ def retrieve (self , request , id = None ):
217223 """
218224 Query a specific provider as a FHIR Practitioner resource
219225 """
220226 try :
221- UUID (pk )
227+ UUID (id )
222228 except (ValueError , TypeError ):
223- return HttpResponse (f"Practitioner { escape (pk )} not found" , status = 404 )
229+ return HttpResponse (f"Practitioner { escape (id )} not found" , status = 404 )
224230
225231 provider = get_object_or_404 (
226232 Provider .objects .prefetch_related (
@@ -236,7 +242,7 @@ def retrieve(self, request, pk=None):
236242 "providertootherid_set" ,
237243 "providertotaxonomy_set" ,
238244 ),
239- individual_id = pk ,
245+ individual_id = id ,
240246 )
241247
242248 serialized_practitioner = PractitionerSerializer (provider )
@@ -260,6 +266,7 @@ class FHIRPractitionerRoleViewSet(viewsets.GenericViewSet):
260266 filter_backends = [DjangoFilterBackend , SearchFilter , ParamOrderingFilter ]
261267 filterset_class = PractitionerRoleFilterSet
262268 pagination_class = CustomPaginator
269+ lookup_url_kwarg = "id"
263270
264271 ordering_fields = ["location__name" , "practitioner_first_name" , "practitioner_last_name" ]
265272
@@ -304,16 +311,16 @@ def list(self, request):
304311 )
305312 }
306313 )
307- def retrieve (self , request , pk = None ):
314+ def retrieve (self , request , id = None ):
308315 """
309316 Query a specific relationship between providers, healthcare organizations, and practice locations, represented as a FHIR PractitionerRole resource
310317 """
311318 try :
312- UUID (pk )
319+ UUID (id )
313320 except (ValueError , TypeError ):
314- return HttpResponse (f"PractitionerRole { escape (pk )} not found" , status = 404 )
321+ return HttpResponse (f"PractitionerRole { escape (id )} not found" , status = 404 )
315322
316- practitionerrole = get_object_or_404 (ProviderToLocation , pk = pk )
323+ practitionerrole = get_object_or_404 (ProviderToLocation , id = id )
317324
318325 serialized_practitionerrole = PractitionerRoleSerializer (
319326 practitionerrole , context = {"request" : request }
@@ -338,6 +345,7 @@ class FHIROrganizationViewSet(viewsets.GenericViewSet):
338345 filter_backends = [DjangoFilterBackend , SearchFilter , ParamOrderingFilter ]
339346 filterset_class = OrganizationFilterSet
340347 pagination_class = CustomPaginator
348+ lookup_url_kwarg = "id"
341349
342350 ordering_fields = ["organizationtoname__name" ]
343351
@@ -399,14 +407,14 @@ def list(self, request):
399407 200 : OpenApiResponse (description = "Successfully retrieved FHIR Organization resource" )
400408 }
401409 )
402- def retrieve (self , request , pk = None ):
410+ def retrieve (self , request , id = None ):
403411 """
404412 Query a specific organization, represented as a FHIR Organization resource
405413 """
406414 try :
407- UUID (pk )
415+ UUID (id )
408416 except (ValueError , TypeError ):
409- return HttpResponse (f"Organization { escape (pk )} not found" , status = 404 )
417+ return HttpResponse (f"Organization { escape (id )} not found" , status = 404 )
410418
411419 organization = get_object_or_404 (
412420 Organization .objects .prefetch_related (
@@ -431,7 +439,7 @@ def retrieve(self, request, pk=None):
431439 "clinicalorganization__organizationtotaxonomy_set" ,
432440 "clinicalorganization__organizationtotaxonomy_set__nucc_code" ,
433441 ),
434- pk = pk ,
442+ id = id ,
435443 )
436444
437445 serialized_organization = OrganizationSerializer (organization , context = {"request" : request })
@@ -455,6 +463,7 @@ class FHIRLocationViewSet(viewsets.GenericViewSet):
455463 filter_backends = [DjangoFilterBackend , SearchFilter , ParamOrderingFilter ]
456464 filterset_class = LocationFilterSet
457465 pagination_class = CustomPaginator
466+ lookup_url_kwarg = "id"
458467
459468 ordering_fields = ["organization_name" , "address_full" , "name" ]
460469
@@ -512,16 +521,16 @@ def list(self, request):
512521 200 : OpenApiResponse (description = "Successfully retrieved FHIR Location resource" )
513522 }
514523 )
515- def retrieve (self , request , pk = None ):
524+ def retrieve (self , request , id = None ):
516525 """
517526 Query a specific healthcare practice location as a FHIR Location resource
518527 """
519528 try :
520- UUID (pk )
529+ UUID (id )
521530 except (ValueError , TypeError ):
522- return HttpResponse (f"Location { escape (pk )} not found" , status = 404 )
531+ return HttpResponse (f"Location { escape (id )} not found" , status = 404 )
523532
524- location = get_object_or_404 (Location , pk = pk )
533+ location = get_object_or_404 (Location , id = id )
525534
526535 serialized_location = LocationSerializer (location , context = {"request" : request })
527536
0 commit comments