Как взимать плату за просроченные книги
1-й выпуск)
Я хочу взимать плату с пользователя за просроченные книги и я пытался в модели, когда создается экземпляр bookissue, переопределить метод save(), но это не так успешно... В этом случае, является ли хорошей практикой переопределение метода save() в модели BookIssue для взимания платы с пользователя или в модели BookReturn (у меня есть модель bookreturn) - нужно ли мне создавать отдельную таблицу для этого?
2dn Issue)
Я пытался уменьшить количество на 1 после выдачи книги, переопределив метод save() и он работал хорошо, но когда я пытался увеличить количество на 1 при выдаче книги обратно, это не сработало, как это можно реализовать
Models.py
def get_expiry_date():
return date.today() + timedelta(days=10)
class BookIssue(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
book = models.ForeignKey(Book, on_delete=models.CASCADE)
issue_date = models.DateField(auto_now_add=True)
return_date = models.DateField(default=get_expiry_date)
quantity = models.IntegerField(default=0)
charge_amount = models.IntegerField(default=0)
def __str__(self):
return str(self.book)
def save(self, *args, **kwargs):
if not self.pk:
self.book.quantity = self.book.quantity - 1
self.book.save()
overdue_rate = 1.50 ####($1.50 per day)
overdue_days = self.book.return_date > self.book.issue_date - timedelta(days=10)
if overdue_days:
self.book.charge_amount = overdue_days * 10
overdue_rate * ((date.today() - self.book.return_date) / 1).days
self.book.save()
super().save(*args, **kwargs)