django: посчитать разницу между датами

Нужно посчитать кол-во дней между датами, которые водятся клиентом сайта, при этом не заносить их в базу данных

Вот мой html код:

{% load crispy_forms_tags %}
<body>
    <form method="post">
        {% csrf_token %}
        <p>
            От: <input type="date" name="date_from">
        </p>
        <p>
            До: <input type="date" name="date_befor">
        </p>
        <input type="submit" value="Отправить">
    </form>
</body>

Код views.py

from django.views.generic import View


class IndexView(View):

    def post(self, request, *args, **kwargs):
       
        if request.method == 'POST':
            date_from = request.POST['date_from']
            date_before = request.POST['date_before']

        return render(request, 'index.html')

Мне нужно получить разницу между date_from и date_before, но у меня не получается их взять у клиента даже. При нажатии на кнопку получаю следующие ошибки

Method Not Allowed (POST): /
Method Not Allowed: /
[02/Apr/2021 09:55:04] "POST / HTTP/1.1" 405 0


Ответы (1 шт):

Автор решения: Vadim.Sharoikin

как по мне то использование формы django в данном примере избыточно. Проще сделать так

<form method="post">
    {% csrf_token %}
    <p>
        От: <input type="date" name="start_date" >
    </p>
    <p>
        До: <input type="date" name="end_date" >
    </p>
    <input type="submit" value="Отправить">
</form>

Для каждого инпута в форме нужно задать уникальный атрибут name чтобы получить доступ во views

и во views

from django.views.generic import View

class IndexView(View):

    def post(self, request, *args, **kwargs):
        if request.method == 'POST':
            delta_time = request.POST['start_date'] - request.POST['end_date']

        return render(request, 'index.html',{'delta_time':delta_time })
    
    def get(self, request, *args, **kwargs):
        return render(request, 'index.html')

и дальше уже в шаблоне вывести delta_time в нужном месте

→ Ссылка