def _getRelativeDetailURI(self, modelObj): if not modelObj: return None lookup_field = getattr(modelObj, "pk", None) kwargs = {"pk": lookup_field} parent_lookups = drf_nested_routing.get_parent_query_lookups_by_class( modelObj.__class__) if parent_lookups: for lookup in parent_lookups: lookup_path = lookup.split('__') parent_lookup = modelObj for part in lookup_path: parent_lookup = getattr(parent_lookup, part) parentLookupId = parent_lookup.id if isinstance( parent_lookup, Model) else parent_lookup kwargs[drf_nested_routing.PARENT_LOOKUP_NAME_PREFIX + lookup] = parentLookupId # Handle unsaved object case if lookup_field is None: return None return reverse(modelObj.__class__.__name__.lower() + '-detail', kwargs=kwargs)
def __add_related_fetches_to_querySet(self, queryset): parent_lookups = drf_nested_routing.get_parent_query_lookups_by_class(queryset.model) related = getattr(self, 'select_related', []) lookups = parent_lookups + related if lookups: queryset = queryset.select_related(*lookups) prefetches = getattr(self, 'prefetch_related', []) for prefetch in prefetches: queryset = queryset.prefetch_related(prefetch)
def __add_related_fetches_to_querySet(self, queryset): parent_lookups = drf_nested_routing.get_parent_query_lookups_by_class( queryset.model) related = getattr(self, 'select_related', []) lookups = parent_lookups + related if lookups: queryset = queryset.select_related(*lookups) prefetches = getattr(self, 'prefetch_related', []) for prefetch in prefetches: queryset = queryset.prefetch_related(prefetch)
def _getRelativeDetailURI(self, modelObj): if not modelObj: return None lookup_field = getattr(modelObj, "pk", None) kwargs = {"pk": lookup_field} parent_lookups = drf_nested_routing.get_parent_query_lookups_by_class(modelObj.__class__) if parent_lookups: for lookup in parent_lookups: lookup_path = lookup.split("__") parent_lookup = modelObj for part in lookup_path: parent_lookup = getattr(parent_lookup, part) parentLookupId = parent_lookup.id if isinstance(parent_lookup, Model) else parent_lookup kwargs[drf_nested_routing.PARENT_LOOKUP_NAME_PREFIX + lookup] = parentLookupId # Handle unsaved object case if lookup_field is None: return None return reverse(modelObj.__class__.__name__.lower() + "-detail", kwargs=kwargs)
def _getWildcardedParentLookups(self, modelClass): parentLookups = drf_nested_routing.get_parent_query_lookups_by_class(modelClass) if not parentLookups: return None return {parentLookup: "*" for parentLookup in parentLookups}
def _getWildcardedParentLookups(self, modelClass): parentLookups = drf_nested_routing.get_parent_query_lookups_by_class( modelClass) if not parentLookups: return None return {parentLookup: "*" for parentLookup in parentLookups}
def _get_parent_lookups_for_select_related(self, queryset): parent_lookups = drf_nested_routing.get_parent_query_lookups_by_class( queryset.model) return parent_lookups