Как выдать и вернуть книгу в системе управления библиотекой
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()