Ошибка 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
, тогда как вам нужно присвоить ей значение.