Ошибка Django datetime; fromisoformat: аргумент должен быть str

Я пытаюсь сделать сайт, на котором у меня есть очень простая система подписки. У меня есть различные планы (30, 60, 90 и 365 дней), и я хотел бы сохранить, после оплаты пользователем, продолжительность плана подписки. Но я получаю странный ответ, вероятно, что-то не так в моей модели, но я не смог это исправить. Вот некоторый код.

models.py

from datetime import datetime as dt, date

DURATION_CHOICES = (
(30, 30),
(60, 60),
(180, 180),
(365, 365),
)

class Subscription(models.Model):
    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
    issue_date = models.DateTimeField(auto_now_add=True)
    duration = models.IntegerField(choices=DURATION_CHOICES)
    expiration_date = models.DateTimeField()


def __str__(self):
    return f'{self.user} - {str(self.expiration_date)}'

def get_expiration(self):
    issue_date = date(self.issue_date)
    expiration_date = issue_date + dt.timedelta(days=self.duration)
    return expiration_date


def save(self, *args, **kwargs):
    self.expiration_date = self.get_expiration
    super(Subscription, self).save(*args, **kwargs)

views.py

def new_subscription(request, days):
    user = request.user
    subscription = Subscription(user=user, duration=days)
    subscription.save()
    messages.success(request, "Subscription successfully obtained")
    return HttpResponseRedirect(reverse('main:index'))

Я знаю, что возможно что-то не так в моем методе сохранения или методе get_expiration, но я не смог найти это.

В вашем методе save() в первой строке есть следующее:

self.expiration_date = self.get_expiration

Однако он должен быть изменен на следующий:

self.expiration_date = self.get_expiration()

Объяснение:

В вашем методе save() вы присваивали что-то вроде <function a at 0x100d1c1f0>, что является ссылкой на память, и это означает, что вы присваиваете функцию self.expiration_date, тогда как вам нужно присвоить ей значение.

Вернуться на верх