Поле 'card_exp_month' ожидало число, но получило (4,) - Django и API stripe при добавлении в модель

Я пишу второй сайт электронной коммерции. Первый, похоже, работает отлично при загрузке данных из stripe API. Он извлекает данные карты и прекрасно сохраняет информацию в модель. На втором сайте я продолжаю получать следующую ошибку и не могу понять, почему. Любая помощь в решении этой проблемы была бы замечательной!

Field 'card_exp_month' expected a number but got (4,). 

Вот код, который выполняется для сохранения данных, которые я получаю:

def process_card(order, charge):
    print("I HAVE THE DATA AS: ", charge)
    print("I have the brand as: ", charge.payment_method_details.card.brand)
    print("I have the expiry year as: ", charge.payment_method_details.card.exp_year)
    print("I have the expiry month as: ", charge.payment_method_details.card.exp_month)
    print("I have the last 4 as: ", charge.payment_method_details.card.last4)
    payment = order.payment
    payment.stripe_payment_intent = order.stripe_payment_intent
    payment.total_paid = Money(charge.amount / 100, charge.currency)
    payment.card_brand = str(charge.payment_method_details.card.brand),
    payment.card_exp_year = int(charge.payment_method_details.card.exp_year),
    payment.card_exp_month = int(charge.payment_method_details.card.exp_month),
    payment.card_last4 = str(charge.payment_method_details.card.last4),
    payment.receipt_url = charge.receipt_url
    payment.save()
    order.stripe_payment_intent = None
    order.order_flow = "PAID"
    order.save()

Когда я просматриваю консоль, я получаю следующий вывод, который, кажется, показывает правильные значения, за которыми следует сообщение об ошибке!

I have the brand as:  visa
I have the expiry year as:  2024
I have the expiry month as:  4
I have the last 4 as:  4242
3 I have an error as:  Field 'card_exp_month' expected a number but got (4,).

Оператор print показывает только число 4, но когда я использую тот же код в последующей строке, оно становится (4,)???

Моя модель определяется следующим образом:

class Payment(models.Model):
    order = models.OneToOneField(Order, on_delete=models.CASCADE, null=False, blank=False)
    stripe_payment_intent = models.CharField(max_length=30, blank=True, null=True)
    total_paid = MoneyField(max_digits=6, decimal_places=2, blank=False, null=False, default=0.00,
                            default_currency='AUD')
    discount = MoneyField(max_digits=6, decimal_places=2, blank=False, null=False, default=0.00, default_currency='AUD')
    refund_amount = MoneyField(max_digits=6, decimal_places=2, blank=False, null=False, default=0.00,
                               default_currency='AUD')
    card_brand = models.CharField(max_length=10, null=True)
    card_exp_month = models.SmallIntegerField(null=True)
    card_exp_year = models.SmallIntegerField(null=True)
    card_last4 = models.CharField(max_length=4, null=True)
    receipt_url = models.TextField(null=True, blank=False)
    created_at = models.DateTimeField(default=timezone.now, blank=False)
    updated_at = models.DateTimeField(default=timezone.now, blank=False)

    def __str__(self):
        return self.order.order_number

Данные, которые поступают из API Stripe, следующие:

"payment_method_details": {
    "card": {
      "brand": "visa",
      "checks": {
        "address_line1_check": null,
        "address_postal_code_check": "pass",
        "cvc_check": "pass"
      },
      "country": "US",
      "exp_month": 4,
      "exp_year": 2024,
      "fingerprint": "z6FNTx3llenE17ly",
      "funding": "credit",
      "installments": null,
      "last4": "4242",
      "network": "visa",
      "three_d_secure": null,
      "wallet": null
    },
    "type": "card"
  },

Любая помощь, которую вы можете оказать, была бы замечательной.

Снова небольшая ошибка и огромное количество потраченного времени.

Но ... если кто-то еще столкнется с такой же проблемой, то запятые в конце строк, где я присваиваю значения, были причиной проблемы:

    payment.card_brand = str(charge.payment_method_details.card.brand),
    payment.card_exp_year = int(charge.payment_method_details.card.exp_year),
    payment.card_exp_month = int(charge.payment_method_details.card.exp_month),

Удаление запятых заставило его работать как ожидалось!

    payment.card_brand = str(charge.payment_method_details.card.brand)
    payment.card_exp_year = int(charge.payment_method_details.card.exp_year)
    payment.card_exp_month = int(charge.payment_method_details.card.exp_month)
Вернуться на верх