На самом деле я работаю над проектом системы управления библиотекой, все работает нормально, кроме функции возврата книги. В моем проекте есть книги, студенты и выпуски, и книга возвращается со штрафом, если она есть. Я делал функцию возврата книги, я сделал logi c, но это тоже правильно, но не сохраняется в базе данных. Даже те расчеты, которые я хотел, выполнены, но не представлены. Делаю последние 3 дня. Пожалуйста, помогите мне, если у вас есть идеи. И, пожалуйста, дайте мне знать, если вам требуются другие файлы.
models.py для возврата Книга
class ReturnBook(models.Model):
actual_return_date = models.DateField(default=datetime.today)
book = models.ForeignKey(Book, on_delete=models.CASCADE)
student_name = models.ForeignKey(Student, on_delete=models.CASCADE)
fine_amount = models.IntegerField(default=0)
def __str__(self):
return self.book.book_name + ' is returned by ' + self.student_name.first_name + ' ' + self.student_name.last_name
forms.py для возврата книги
class ReturnBookForm(forms.ModelForm):
class Meta:
model = ReturnBook
fields = [
'actual_return_date',
'book',
'student_name',
'fine_amount'
]
URL .py для возвратной книги и возвращенной книги
path('issuedbooks/<int:pk>/returnbook/', views.returnBook, name='return-book'),
path('returnedbook/', views.TransactionandReturnBook, name='returned-book'),
returnbookform. html
{% extends "lms/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="section">
<form method="POST" action="{% url 'returned-book' %}">
{% csrf_token %}
<fieldset class="form-group">
<div class="card mt-4 detail-view-header">
<h3 class="text-center mt-2 font-weight-bold" style="font-family: monospace; font-size: 25px;">Return
Book here </h3>
</div>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Return Book</button>
</div>
</form>
</div>
{% endblock content %}
views.py для возврата книги
@login_required
def returnBook(request, pk):
obj = get_object_or_404(Issue, id=pk)
print(obj)
fine = 0
d1 = date.today()
d2 = obj.expected_return_date
diff_date = d2.day - d1.day
print(diff_date)
if diff_date > 0:
fine = diff_date*2
book = Book.objects.get(book_name=obj.book)
print(book)
book.available_copies = book.available_copies + 1
book.save()
fname = obj.student_name.first_name
print(fname)
student = Student.objects.get(first_name=fname)
print(student)
student.no_of_issued_books = student.no_of_issued_books - 1
student.save()
initial_dict = {
'book' : obj.book,
'student_name': obj.student_name,
'actual_return_date': datetime.today,
'fine_amount': obj.fine_amount,
}
form = ReturnBookForm(request.POST or None, initial=initial_dict)
if form.is_valid():
form.save()
messages.success(request, 'You have returned the book')
return redirect('returned-book')
Issue.objects.filter(id=obj.id).delete()
context = {
'form': form
}
return render(request, 'lms/returnbook_form.html', context)
models.py для выпускная книжка
def get_expected_return_date():
return datetime.today() + timedelta(days=30)
class Issue(models.Model):
student_name = models.ForeignKey(Student, on_delete=models.CASCADE)
book = models.ForeignKey(Book, on_delete=models.CASCADE)
issue_date = models.DateField(default=datetime.today)
expected_return_date = models.DateField(default=get_expected_return_date)
def __str__(self):
return self.book.book_name + ' issued for ' + self.student_name.first_name + ' ' + self.student_name.last_name