django表单正在提交,但对象未保存在数据库中

时间:2020-05-09 15:04:29

标签: python django django-models django-forms django-views

实际上,我正在图书馆管理系统项目中,除归还书本功能外,其他一切都工作正常。我的项目包含书籍,学生和书籍,如果有的话,还可以将其还书。我当时正在做一个归还书功能,我做了逻辑,但它也是正确的,但没有保存到数据库中。即使我想要的计算也已完成,但未提交。我从最近三天开始。如果您有任何想法,请帮助我。而且,请告诉我是否需要其他文件。

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'
        ]

urls.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 for issue book

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 :(得分:0)

您在表单中使用了错误的操作。请使用 {%url'return-book'%} ,而不是 {%url'returned-book'%} < / p>

相关问题