Django按特定日期过滤

时间:2019-11-29 21:44:03

标签: django date filter

我有一个需要选择某一天的应用程序,它返回给我事件的总数以及当天的活动事件列表。 每个事件都有一个持续时间。 我可以为今天进行过滤,但是如果要在其他任何一天进行过滤,该怎么办?

模型

class Event(models.Model):
    name = models.CharField(max_length=50, null=True, blank=True, verbose_name='Name')
    start_date = models.DateTimeField(null=True, blank=False, verbose_name='Start')
    end_date = models.DateTimeField(null=True, blank=False, verbose_name='End')

    def __str__(self):
        return '{}'.format(self.name)

视图

def total_events(request):
    events = Event.objects.filter(Q(start_date__lte=timezone.now()) & Q(end_date__gte=timezone.now()))
    total_events = events.count()
    context = {
        'events': events,
        'total_events': total_events,
    }

    return render(request, 'list.html', context)

模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Event Search</title>
</head>
<body>
<br>
<br>
DAY:
<input type="text">
<button>Filter</button>
<br>
<br>
<b>Total of active events in filtered day:</b> {{ total_events }}
<br>
<b>List of active events in filtered day:</b>
<table>
    <tr>
        {% for event in events %}
            <td>
                {{ event.name }}
            </td>
        {% endfor %}
    </tr>
</table>
</body>
</html>

输出如下:

enter image description here

有人可以给我一个方向吗?谢谢!

2 个答案:

答案 0 :(得分:0)

您需要在要过滤的当天创建一个datetime对象。

day = timezone.datetime(year=2019, month=11, day=30)

# and now you can use this object in your filter query

答案 1 :(得分:0)

挖掘之后,我找到了解决方案:

观看次数

def total_events(request):
    events = Event.objects.all()
    day_query = request.GET.get('day')
    if day_query != '' and day_query is not None:
        events = Event.objects.filter(Q(start_date__date__lte=day_query) & Q(end_date__date__gte=day_query))

    total_events = events.count()

    context = {
        'events': events,
        'total_events': total_events,
    }

    return render(request, 'list.html', context)

模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Event Search</title>
</head>
<body>
<br>
<br>
DAY:
<form method="GET" action=".">
    <input type="text" name="day">
    <button type="submit">Filter</button>
</form>
<br>
<br>
<b>Total of active events in filtered day:</b> {{ total_events }}
<br>
<b>List of active events in filtered day:</b>
<table>
    <tr>
        {% for event in events %}
            <td>
                {{ event.name }}
            </td>
        {% endfor %}
    </tr>
</table>
</body>
</html>