【问题标题】:Django filter by a specific dayDjango按特定日期过滤
【发布时间】:2020-03-25 10:24:50
【问题描述】:

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

型号

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>

输出是这样的:

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

【问题讨论】:

    标签: django date filter


    【解决方案1】:

    您需要为要过滤的日期创建一个datetime 对象。

    day = timezone.datetime(year=2019, month=11, day=30)
    
    # and now you can use this object in your filter query
    

    【讨论】:

      【解决方案2】:

      挖掘后我找到了这个解决方案:

      观看次数

      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>
      

      【讨论】:

        猜你喜欢
        • 2019-03-01
        • 2021-01-16
        • 1970-01-01
        • 2013-08-16
        • 2016-07-10
        • 1970-01-01
        • 1970-01-01
        • 2014-02-26
        相关资源
        最近更新 更多