django форма отправляется, но объект не сохранен в базе данных - PullRequest
0 голосов
/ 09 мая 2020

На самом деле я работаю над проектом системы управления библиотекой, все работает нормально, кроме функции возврата книги. В моем проекте есть книги, студенты и выпуски, и книга возвращается со штрафом, если она есть. Я делал функцию возврата книги, я сделал 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

1 Ответ

0 голосов
/ 09 мая 2020

Вы используете неправильные действия в формах. Используйте {% url 'return-book'%} вместо {% url 'Return-book'%}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...