docs: def capacityForRole(self,role):
          '''
          Accepts a DanceRole object and determines the capacity for that role at this event.this
          Since roles are not always custom specified for events, this looks for the set of
          available roles in multiple places, and only returns the overall capacity of the event
          if roles are not found elsewhere.
          '''
          if isinstance(role, DanceRole):
              role_id = role.id
          else:
              role_id = role
  
          eventRoles = self.eventrole_set.filter(capacity__gt=0)
          if eventRoles.count() > 0 and role_id not in [x.role.id for x in eventRoles]:
              ''' Custom role capacities exist but role this is not one of them. '''
              return 0
          elif eventRoles.count() > 0:
              ''' The role is a match to custom roles, so check the capacity. '''
              return eventRoles.get(role=role).capacity
  
          # No custom roles for this event, so get the danceType roles and use the overall
          # capacity divided by the number of roles
          if isinstance(self,Series):
              try:
                  availableRoles = self.classDescription.danceTypeLevel.danceType.roles.all()
  
                  if availableRoles.count() > 0 and role_id not in [x.id for x in availableRoles]:
                      ''' DanceType roles specified and this is not one of them '''
                      return 0
                  elif availableRoles.count() > 0 and self.capacity:
                      # Divide the total capacity by the number of roles and round up.
                      return ceil(self.capacity / availableRoles.count())
              except ObjectDoesNotExist as e:
                  logger.error('Error in calculating capacity for role: %s' % e)
  
          # No custom roles and no danceType to get roles from, so return the overall capacity
          return self.capacity