docs: def update_from_stripe_data(self, stripe_coupon, exclude_fields=None, commit=True):
          """
          Update StripeCoupon object with data from stripe.Coupon without calling stripe.Coupon.retrieve.
  
          To only update the object, set the commit param to False.
          Returns the number of rows altered or None if commit is False.
          """
          fields_to_update = self.STRIPE_FIELDS - set(exclude_fields or [])
          update_data = {key: stripe_coupon[key] for key in fields_to_update}
          for field in ["created", "redeem_by"]:
              if update_data.get(field):
                  update_data[field] = timestamp_to_timezone_aware_date(update_data[field])
  
          if update_data.get("amount_off"):
              update_data["amount_off"] = Decimal(update_data["amount_off"]) / 100
  
          # also make sure the object is up to date (without the need to call database)
          for key, value in six.iteritems(update_data):
              setattr(self, key, value)
  
          if commit:
              return StripeCoupon.objects.filter(pk=self.pk).update(**update_data)