code: def update_ip_info(self, since_days=10, save=False, force=False):
          
          # If ip already checked
          try:
              last_check = IPInfoCheck.objects.get(
                  ip_address=self.client_ip_address)
  
              # If checked less than since_days ago, don't check again
              since_last = datetime.date.today() - last_check.date
              if since_last <= datetime.timedelta(days=since_days):
                  if not self.ip_info or (
                          self.ip_info != last_check.ip_info and force):
                      self.ip_info = last_check.ip_info
                      self.save()
                      return True
                  elif save:
                      self.save()
                  return False
  
              # Get or create ip_info object
              ip_info, created = IPInfo.get_or_create_from_ip(
                  self.client_ip_address)
  
              # Update check time
              last_check.date = datetime.date.today()
              last_check.save()
  
              # Maybe data changed
              if created:
                  last_check.ip_info = ip_info
                  self.ip_info = ip_info
                  self.save()
                  return True
              elif save:
                  self.save()
  
              return False
  
          except IPInfoCheck.DoesNotExist:
              # Else if ip never checked, check it and set ip_info
              self.ip_info = IPInfoCheck.check_ip(self.client_ip_address)
              self.save()
  
              return True
docs: Update the IP info.
  
          Args:
              since_days (int): if checked less than this number of days ago,
                  don't check again (default to 10 days).
              save (bool): whether to save anyway or not.
              force (bool): whether to update ip_info to last checked one.
  
          Returns:
              bool: check was run. IPInfo might not have been updated.