我有下面的Django视图来过滤基于月份的事件

class FilterByMonthView(ListView):
    model = Event
    template_name = 'your_template.html'
    context_object_name = 'filtered_data'

    def get_queryset(self):
        month = self.kwargs.get('month')
        month = str(month).zfill(2)

        # Construct a date range for the specified month
        start_date = datetime.strptime(f'2023-{month}-01 00:00:00', '%Y-%m-%d %H:%M:%S')
        end_date = datetime.strptime(f'2023-{month}-01 23:59:59', '%Y-%m-%d %H:%M:%S')
        # Assuming end of the month

        # Filter the data based on the date range
        queryset = Event.objects.filter(
            event_date__range=(start_date, end_date)
        )
        return queryset

下面是我的Models.py

class Event(models.Model):
    emp_id = models.IntegerField(max_length=50)
    event_type = models.CharField(max_length=50)
    event_date = models.DateTimeField()
    email = models.EmailField()

    def __str__(self):
        return f"{self.event_type} {self.event_date} {self.email}"

在我创建事件时,在Django管理页面中,我看到以下输出

ID  Emp id  Event type  Event date           Email 
6   67565   Birthday    Nov. 15,2010,6 a.m. jhad@jhsd.com

下面是分别代表项目级和应用级的urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('emp/', include('EVENTS.urls')),

]


from django.urls import path
from .views import FilterByMonthView

urlpatterns = [
    path('filter/<int:month>/', FilterByMonthView.as_view(), name='filter-by-month'),
]

Html如下所示

<!DOCTYPE html>
<html>
<head>
    <title>Filtered Events</title>
</head>
<body>
    <h1>Events for the Selected Month</h1>
    <ul>
        {% for event in filtered_data %}
            <li>{{ event.event_date }} - {{ event.event_name }}</li>
            <!-- Display other event attributes as needed -->
        {% empty %}
            <li>No events found for this month.</li>
        {% endfor %}
    </ul>
</body>
</html>

我在浏览器中看到"No events found for this month.".

下面是我正在使用的示例url

http://127.0.0.1:8000/emp/filter/11/

我怀疑问题似乎出在日期格式上.但也不确定.请提出建议

推荐答案

您表格中的年份是2010年,因此超出了范围.

但如果你只想匹配月份,而不是年份,那你就把事情搞得过于复杂了.您只需使用:

class FilterByMonthView(ListView):
    model = Event
    template_name = 'your_template.html'
    context_object_name = 'filtered_data'

    def get_queryset(self):
        return (
            super().get_queryset().filter(event_date__month=self.kwargs['month'])
        )

Python-3.x相关问答推荐

CONNEXION.EXCEPTIONS.ResolverError:运行pyz文件时未命名模块

数组列的极点成对求和

是什么原因导致Pandas=2.1.4和Pandas=1.4.2之间Pandas DataFrame中从Float64到int32的连续列转换方式不同

为什么我无法在django中按月筛选事件?

命名空间前缀无效

一起使用数据类和枚举

将值从函数传递到标签

在新数据帧上自动提取两个字符串 python 之间的相等性

将数据框中的值与另一个数据框中的多列进行比较,以获取条目以有效方式匹配的列表列表

使用正则表达式提取字符串之间的文本

无法使用 Python 和 Selenium 检索 href 属性

TimescaleDB:是否可以从 Python 调用create_hypertable?

在python中基于列表理解的条件下跳过元素

Python过滤器函数 - 单个结果

__cause__ 和 __context__ 有什么区别?

在python中,如果一个函数没有return语句,它会返回什么?

首次使用后 zip 变量为空

print(... sep='', '\t' ) 是什么意思?

如何使用 Celery 和 Django 将任务路由到不同的队列

交错4个相同长度的python列表