0

When I want to filter my model using one exactly date I use the following code line,

today = datetime.datetime.now().date()
today_data = DevData.objects.filter(data_timestamp__date=today)

And when I want to filter using a range of days, I use the following code line,

last7days = datetime.datetime.now().date() - datetime.timedelta(days=7)
last7days_data = DevData.objects.filter(data_timestamp__range=(last7days,today))

The problem is that when I use this second code, appears a warning and runs very very slow,

RuntimeWarning: DateTimeField DevData.data_timestamp received a naive datetime (2020-05-31 00:00:00) while time zone support is active.

How can I do it better?

I found this post, but don't understand how to solve it. Can somebody help me please?

Lleims
  • 1,275
  • 12
  • 39

2 Answers2

0

The fact that it runs rather slow is likely because you did not set a database index on the data_timestamp field, you can add one by specifying a db_index=True parameter [Django-doc]:

class DevData(models.Data):
    data_timestamp = models.DateTimeField(db_index=True)
    # …

You can furthermore filter the data by adding a __date lookup [Django-doc] in the query:

last7days = datetime.datetime.now().date() - datetime.timedelta(days=7)
last7days_data = DevData.objects.filter(
    data_timestamp__date__range=(last7days,today)
)
Willem Van Onsem
  • 443,496
  • 30
  • 428
  • 555
0

You are seeing a warning because last7days variable is not timezone-aware.

You can make it timezone-aware like so:

import datetime
from datetime import timezone

unaware = datetime.datetime(2020, 1, 1, 1, 1, 1, 1)
aware = unaware.replace(tzinfo=timezone.utc))
Pavel Botsman
  • 773
  • 1
  • 11
  • 25