Фильтровать элементы по дате (django)

Я составляю простой список дел. Сначала я показываю список всех дат, в которые были добавлены элементы.

  • views.py

    def allDates(request):
        date = Todo.objects.extra(select={'custom_dt': 'strftime("%d-%m-%Y", "created_at")'}).values_list('custom_dt', flat=True).order_by('-custom_dt').distinct() # display all dates
    
        return render(request, 'todo/alldates.html', {'date':date})
    
  • alldates.html

    {% for dat in date %}
        <a href="{% url 'detaildate' %}"><h1>{{ dat }}</h1></a> # link to see items added to this date
    {% endfor %}
    

enter image description here

После того, как я попытаюсь создать метод, фильтрующий элементы по дате, я щелкнул

  • views.py (подробная дата)

    def detailDate(request):
       detail = Todo.objects.order_by('-created_at')
       return render(request, 'todo/detaildate.html', {'detail':detail})
    

У меня есть этот результат, отображаются все элементы, но мне нужно только с даты, с которой я связываю

enter image description here

Как я могу отображать - фильтровать элементы по дате в ссылке?

0
0
59
2

Ответы 2

Я думаю, вам нужно использовать:

def detailDate(request, date): detail = Todo.objects.filter(created_at=date) return render(request, 'todo/detaildate.html', {'detail':detail})

Вы хотите фильтровать объекты, не упорядочивая их.

У меня - detailDate () отсутствует 1 обязательный позиционный аргумент: 'date'

karaname 31.10.2018 12:52
detail = Todo.objects.order_by('-created_at')
return render(request, 'todo/detaildate.html', {'detail':detail})

Делая это, вы передаете объекты todo в шаблоны django. Если вы хотите, чтобы дата отображалась только в шаблонах, вам нужно перебрать объекты и показывать дату только в файле detaildate.html.

{% for det in detail %}
    {{det.created_at}}
{% endfor %}

Если вы пытаетесь отфильтровать задачу по дате, вам нужно запросить ее по

todos = Todo.objects.filter(created_date=date)

У меня - detailDate () отсутствует 1 обязательный позиционный аргумент: 'date'

karaname 31.10.2018 12:51
def detailDate(request, date): detail = Todo.objects.filter(created_date=date) return render(request, 'todo/detaildate.html', {'detail':detail}) дата отсутствует
karaname 31.10.2018 12:51

Если вы передаете такую ​​дату, вам нужно добавить ее в URL-адреса. В противном случае вы можете передать дату в качестве параметра запроса. Таким образом, вы можете получить его в запросе как request.GET.get ('date'), если это запрос на получение. так что функция будет похожа. def detailDate (запрос): date = request.GET.get ('date') detail = Todo.objects.filter (created_date = date) return render (request, 'todo / detaildate.html', {'detail': detail} )

Sreehari S 02.11.2018 09:02

Другие вопросы по теме