Как взимать плату за просроченные книги

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)
Вернуться на верх