def services(self, request, pk=None): settings = models.ServiceSettings.objects.get(id=pk) projects = {} spl_model = SupportedServices.get_related_models( settings)['service_project_link'] for spl in spl_model.objects.filter(service__settings=settings): projects.setdefault( spl.project.id, { 'name': str(spl.project), 'url': get_admin_url(spl.project), 'services': [], }, ) projects[spl.project.id]['services'].append({ 'name': str(spl.service), 'url': get_admin_url(spl.service), }) return render( request, 'structure/service_settings_entities.html', {'projects': projects.values()}, )
def clean(self): if not self.service: raise ValidationError(_('Service is not defined.')) if SupportedServices.is_public_service(self.service): raise ValidationError(_('Public service does not support price list items.')) resource = self.default_price_list_item.resource_content_type.model_class() valid_resources = SupportedServices.get_related_models(self.service)['resources'] if resource not in valid_resources: raise ValidationError(_('Service does not support required content type.'))
def get_queryset(self): queryset = models.DefaultPriceListItem.objects.all() service = self._find_service() if service: # Filter items by resource type resources = SupportedServices.get_related_models(service)['resources'] content_types = ContentType.objects.get_for_models(*resources).values() queryset = queryset.filter(resource_content_type__in=content_types) # Attach service-specific items price_list_items = models.PriceListItem.objects.filter(service=service) prefetch = Prefetch('pricelistitem_set', queryset=price_list_items, to_attr='service_item') queryset = queryset.prefetch_related(prefetch) return queryset
def get_spl_model(self): """ Get service project link model used by resource model using service registry. """ return SupportedServices.get_related_models( self.get_resource_model())['service_project_link']
def get_service_model(self, offering_type): resource_model = self.get_resource_model(offering_type) return SupportedServices.get_related_models(resource_model)['service']