Как выдать и вернуть книгу в системе управления библиотекой

1-ая проблема -. Я хочу, чтобы когда пользователь выписывает книгу, количество должно уменьшаться на 1, а когда книги нет, пользователь не должен иметь возможность выписать книгу, и это должно обрабатываться bookIssueView(first view)

2-ая проблема... Я хочу вернуть (удалить из списка выданных книг) выданные книги, нажав кнопку return и после того, как книга возвращена, количество должно быть увеличено на 1 (я не смог справиться с этим также) теперь, когда кнопка нажата, она показывает - ConnectionDoesNotExist at /book-return/1/ Соединение 'Django For Pro' не существует - Вот код, написанный

Разные мнения

def bookIssueView(request, id):
    book = get_object_or_404(Book, id=id)
    issue_date = timezone.now()

    quantity = 0
    book_issue = BookIssue.objects.create(
        issue_date=issue_date, book=book, reader=request.user.reader, quantity=quantity
    )
    book = book_issue

    messages.info(request, "Book has been issued.")
    return redirect("book_issue_list"


def bookIssueView(request, id):
    book = get_object_or_404(Book, id=id)
    issue_date = timezone.now()

    quantity = 0
    book_issue = BookIssue.objects.create(
        issue_date=issue_date, book=book, reader=request.user.reader, quantity=quantity
    )
    book = book_issue

    messages.info(request, "Book has been issued.")
    return redirect("book_issue_list")

Разные модели

class Book(models.Model):
    book_name = models.CharField(max_length=50)
    author_name = models.CharField(max_length=50)
    isbn = models.CharField(max_length=50, unique=True)
    category = models.CharField(choices=CATEGORY, max_length=30)
    description = models.TextField()
    cover = models.ImageField(upload_to="book_cover/")
    status = models.CharField(choices=BOOK_STATUS, default="Available", max_length=50)
    quantity = models.IntegerField(default=0)  

class BookIssue(models.Model):
    reader = models.ForeignKey(Reader, 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)

class BookReturn(models.Model):
    reader = models.ManyToManyField(Reader)
    book = models.ManyToManyField(Book)
    return_date = models.DateField(default=get_expiry_date)

Вместо get_object_or_404 нужно использовать DoesNotExist.

Изменить это:

book = get_object_or_404(Book, id=id)

to:

try:
    book = Book.objects.get(id=id)
except Book.DoesNotExist:
    messages.info(request, "Book does not exist.")
    return redirect("book_issue_list")

Для уменьшения количества после создания объекта, лучше переопределить save() метод для создания и delete() метод для удаления в вашей модели:

class BookIssue(models.Model):
    ...
    def save(self, *args, **kwargs):
        if not self.pk: # only for creating not for update:
            self.book.quantity = self.book.quantity - 1
            self.book.save()
        super().save(*args, **kwargs)

Но если вы настаиваете на том, чтобы сделать это в своем views.py, вы можете сделать так:

book = get_object_or_404(Book, id=id)
...
book.quantity = book.quantity - 1
book.save()
Вернуться на верх