|
7 | 7 | from rest_framework.renderers import BrowsableAPIRenderer |
8 | 8 | from django.core.cache import cache |
9 | 9 | from django.db.models import OuterRef, Subquery |
10 | | -from .models import Provider, EndpointInstance, ClinicalOrganization, OrganizationToName |
| 10 | +from .models import Provider, EndpointInstance, ClinicalOrganization, OrganizationToName, Individual, IndividualToName |
11 | 11 | from .serializers import PractitionerSerializer, ClinicalOrganizationSerializer, BundleSerializer, EndpointSerializer |
12 | 12 | from .mappings import genderMapping, addressUseMapping |
13 | 13 | from .renderers import FHIRRenderer |
@@ -168,8 +168,38 @@ def list(self, request): |
168 | 168 |
|
169 | 169 | all_params = request.query_params |
170 | 170 |
|
| 171 | + # Subqueries for last_name and first_name of the individual |
| 172 | + primary_last_name_subquery = ( |
| 173 | + IndividualToName.objects |
| 174 | + .filter(individual=OuterRef('individual')) |
| 175 | + .order_by('last_name') |
| 176 | + .values('last_name')[:1] |
| 177 | + ) |
| 178 | + |
| 179 | + primary_first_name_subquery = ( |
| 180 | + IndividualToName.objects |
| 181 | + .filter(individual=OuterRef('individual')) |
| 182 | + .order_by('first_name') |
| 183 | + .values('first_name')[:1] |
| 184 | + ) |
| 185 | + |
| 186 | + |
171 | 187 | providers = Provider.objects.all().prefetch_related( |
172 | | - 'npi', 'individual', 'individual__individualtoname_set', 'individual__individualtoaddress_set', 'individual__individualtoaddress_set__address__address_us', 'individual__individualtoaddress_set__address__address_us__state_code', 'individual__individualtoaddress_set__address_use', 'individual__individualtophone_set', 'individual__individualtoemail_set', 'providertootherid_set', 'providertotaxonomy_set') |
| 188 | + 'npi', |
| 189 | + 'individual', |
| 190 | + 'individual__individualtoname_set', |
| 191 | + 'individual__individualtoaddress_set', |
| 192 | + 'individual__individualtoaddress_set__address__address_us', |
| 193 | + 'individual__individualtoaddress_set__address__address_us__state_code', |
| 194 | + 'individual__individualtoaddress_set__address_use', |
| 195 | + 'individual__individualtophone_set', |
| 196 | + 'individual__individualtoemail_set', |
| 197 | + 'providertootherid_set', |
| 198 | + 'providertotaxonomy_set' |
| 199 | + ).annotate( |
| 200 | + primary_last_name=Subquery(primary_last_name_subquery), |
| 201 | + primary_first_name=Subquery(primary_first_name_subquery) |
| 202 | + ).order_by('primary_last_name','primary_first_name') |
173 | 203 |
|
174 | 204 | for param, value in all_params.items(): |
175 | 205 | match param: |
|
0 commit comments