from __future__ import unicode_literals

from django.db.models import Q, QuerySet


class ConfigContextQuerySet(QuerySet):

    def get_for_object(self, obj):
        """
        Return all applicable ConfigContexts for a given object. Only active ConfigContexts will be included.
        """

        # `device_role` for Device; `role` for VirtualMachine
        role = getattr(obj, 'device_role', None) or obj.role

        return self.filter(
            Q(regions=obj.site.region) | Q(regions=None),
            Q(sites=obj.site) | Q(sites=None),
            Q(roles=role) | Q(roles=None),
            Q(tenants=obj.tenant) | Q(tenants=None),
            Q(platforms=obj.platform) | Q(platforms=None),
            is_active=True,
        ).order_by('weight', 'name')

from __future__ import unicode_literals

from django.db.models import Q, QuerySet


class ConfigContextQuerySet(QuerySet):

    def get_for_object(self, obj):
        """
        Return all applicable ConfigContexts for a given object. Only active ConfigContexts will be included.
        """

        # `device_role` for Device; `role` for VirtualMachine
        role = getattr(obj, 'device_role', None) or obj.role

        return self.filter(
            Q(regions=getattr(obj.site, 'region', None)) | Q(regions=None),
            Q(sites=obj.site) | Q(sites=None),
            Q(roles=role) | Q(roles=None),
            Q(tenants=obj.tenant) | Q(tenants=None),
            Q(platforms=obj.platform) | Q(platforms=None),
            is_active=True,
        ).order_by('weight', 'name')

Tweak ConfigContext manager to allow for objects with a regionless site
Tweak ConfigContext manager to allow for objects with a regionless site

  from __future__ import unicode_literals
  
  from django.db.models import Q, QuerySet
  
  
  class ConfigContextQuerySet(QuerySet):
  
      def get_for_object(self, obj):
          """
          Return all applicable ConfigContexts for a given object. Only active ConfigContexts will be included.
          """
  
          # `device_role` for Device; `role` for VirtualMachine
          role = getattr(obj, 'device_role', None) or obj.role
  
          return self.filter(
-             Q(regions=obj.site.region) | Q(regions=None),
+             Q(regions=getattr(obj.site, 'region', None)) | Q(regions=None),
              Q(sites=obj.site) | Q(sites=None),
              Q(roles=role) | Q(roles=None),
              Q(tenants=obj.tenant) | Q(tenants=None),
              Q(platforms=obj.platform) | Q(platforms=None),
              is_active=True,
          ).order_by('weight', 'name')
  
Tweak ConfigContext manager to allow for objects with a regionless site
## Code Before:
from __future__ import unicode_literals

from django.db.models import Q, QuerySet


class ConfigContextQuerySet(QuerySet):

    def get_for_object(self, obj):
        """
        Return all applicable ConfigContexts for a given object. Only active ConfigContexts will be included.
        """

        # `device_role` for Device; `role` for VirtualMachine
        role = getattr(obj, 'device_role', None) or obj.role

        return self.filter(
            Q(regions=obj.site.region) | Q(regions=None),
            Q(sites=obj.site) | Q(sites=None),
            Q(roles=role) | Q(roles=None),
            Q(tenants=obj.tenant) | Q(tenants=None),
            Q(platforms=obj.platform) | Q(platforms=None),
            is_active=True,
        ).order_by('weight', 'name')

## Instruction:
Tweak ConfigContext manager to allow for objects with a regionless site
## Code After:
from __future__ import unicode_literals

from django.db.models import Q, QuerySet


class ConfigContextQuerySet(QuerySet):

    def get_for_object(self, obj):
        """
        Return all applicable ConfigContexts for a given object. Only active ConfigContexts will be included.
        """

        # `device_role` for Device; `role` for VirtualMachine
        role = getattr(obj, 'device_role', None) or obj.role

        return self.filter(
            Q(regions=getattr(obj.site, 'region', None)) | Q(regions=None),
            Q(sites=obj.site) | Q(sites=None),
            Q(roles=role) | Q(roles=None),
            Q(tenants=obj.tenant) | Q(tenants=None),
            Q(platforms=obj.platform) | Q(platforms=None),
            is_active=True,
        ).order_by('weight', 'name')
