docs: def find_or_create(cls, **kwargs):
          """Checks if an instance already exists by filtering with the
          kwargs. If yes, returns that instance. If not, creates a new
          instance with kwargs and returns it
  
          Args:
  
              **kwargs: The keyword arguments which are used for filtering
                  and initialization.
              keys(list, optional): A special keyword argument.
                  If passed, only the set of keys mentioned here will be used
                  for filtering. Useful when we want to 'find' based on a subset
                  of the keys and create with all the keys
  
          Examples:
  
              >>> customer = Customer.find_or_create(
              ...     name="vicky", email="vicky@h.com", country="India")
              >>> customer.id
              45
              >>> customer1 = Customer.find_or_create(
              ...     name="vicky", email="vicky@h.com", country="India")
              >>> customer1==customer
              True
              >>> customer2 = Customer.find_or_create(
              ...     name="vicky", email="vicky@h.com", country="Russia")
              >>> customer2==customer
              False
              >>> customer3 = Customer.find_or_create(
              ...      name="vicky", email="vicky@h.com", country="Russia",
              ...      keys=['name', 'email'])
              >>> customer3==customer
              True
          """
          keys = kwargs.pop('keys') if 'keys' in kwargs else []
          return cls.first(**subdict(kwargs, keys)) or cls.create(**kwargs)