parameters: (self, names, user)
return_statement: return tags
docstring: Fetches a list of Tags with the given names, creating any Tags
          which don't exist when necesssary.
docstring_summary: Fetches a list of Tags with the given names, creating any Tags
          which don't exist when necesssary.
docstring_tokens: Fetches a list of Tags with the given names creating any Tags which don t exist when necesssary .
function: def get_or_create_multiple(self, names, user):
          """
          Fetches a list of Tags with the given names, creating any Tags
          which don't exist when necesssary.
          """
          tags = list(self.filter(name__in=names))
          #Set all these tag visible
          for tag in tags:
              if tag.deleted:
                  tag.deleted = False
                  tag.deleted_by = None
                  tag.deleted_at = None
                  tag.save()
                  
          if len(tags) < len(names):
              existing_names = set(tag.name for tag in tags)
              new_names = [name for name in names if name not in existing_names]
              tags.extend([self.create(name=name, created_by=user)
                           for name in new_names if self.filter(name=name).count() == 0 and len(name.strip()) > 0])
               
          return tags
function_tokens: def get_or_create_multiple ( self , names , user ) : tags = list ( self . filter ( name__in = names ) ) #Set all these tag visible for tag in tags : if tag . deleted : tag . deleted = False tag . deleted_by = None tag . deleted_at = None tag . save ( ) if len ( tags ) < len ( names ) : existing_names = set ( tag . name for tag in tags ) new_names = [ name for name in names if name not in existing_names ] tags . extend ( [ self . create ( name = name , created_by = user ) for name in new_names if self . filter ( name = name ) . count ( ) == 0 and len ( name . strip ( ) ) > 0 ] ) return tags