RuntimeWarning:DateTimeField 在时区支持处于活动状态时接收到原始日期时间
RuntimeWarning: DateTimeField received a naive datetime while time zone support is active
这里我正在编写一个中间件来删除超过 3 个月的对象。 date_before_2_month
和 datetime_before_2_months
工作正常。我还没有测试过过滤但是在我的控制台中它给了我一个运行时警告说 activity_time
收到了一个天真的日期时间。
这个警告是一个问题(需要解决)还是我们可以忽略它?
我的过滤器参数是否也适用于查询 2 个月大的模型中的对象?
activity_time
在模型中是 DateTimeField(auto_now_add=True)
class UserActivityLogDeleteMiddleware(object): # middleware for deleting user activity logs which are older than 2 months
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
date_before_2_month = datetime.date.today() - relativedelta(months=2)
# converting into datetime
datetime_before_2_month = datetime.datetime.combine(date_before_2_month, datetime.time(9, 00, 00))
# deleting logs older than 2 months
UserActivityLog.objects.filter(activity_time__lt=datetime_before_2_month).delete()
response = self.get_response(request)
return response
通常,如果您通过应用使用时区,您希望了解您的日期时间时区。
我可以看到您的代码有一些改进。使用 relativedelta 时,您可以设置小时和分钟,让生活更轻松。
from django.utils import timezone
...
def __call__(self, request):
# Getting a datetime for 2 months ago at 9am
dt_2_months_ago = timezone.now() - relativedelta(months=2, hour=9, minute=0)
# deleting logs older than 2 months
UserActivityLog.objects.filter(activity_time__lt=dt_2_months_ago).delete()
response = self.get_response(request)
return response
请注意,您确定要 运行在中间件中使用它吗?它会 运行 对每个请求,每次你得到 js,每个 ajax 请求等等。只是一个想法。
这里我正在编写一个中间件来删除超过 3 个月的对象。 date_before_2_month
和 datetime_before_2_months
工作正常。我还没有测试过过滤但是在我的控制台中它给了我一个运行时警告说 activity_time
收到了一个天真的日期时间。
这个警告是一个问题(需要解决)还是我们可以忽略它?
我的过滤器参数是否也适用于查询 2 个月大的模型中的对象?
activity_time
在模型中是 DateTimeField(auto_now_add=True)
class UserActivityLogDeleteMiddleware(object): # middleware for deleting user activity logs which are older than 2 months
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
date_before_2_month = datetime.date.today() - relativedelta(months=2)
# converting into datetime
datetime_before_2_month = datetime.datetime.combine(date_before_2_month, datetime.time(9, 00, 00))
# deleting logs older than 2 months
UserActivityLog.objects.filter(activity_time__lt=datetime_before_2_month).delete()
response = self.get_response(request)
return response
通常,如果您通过应用使用时区,您希望了解您的日期时间时区。
我可以看到您的代码有一些改进。使用 relativedelta 时,您可以设置小时和分钟,让生活更轻松。
from django.utils import timezone
...
def __call__(self, request):
# Getting a datetime for 2 months ago at 9am
dt_2_months_ago = timezone.now() - relativedelta(months=2, hour=9, minute=0)
# deleting logs older than 2 months
UserActivityLog.objects.filter(activity_time__lt=dt_2_months_ago).delete()
response = self.get_response(request)
return response
请注意,您确定要 运行在中间件中使用它吗?它会 运行 对每个请求,每次你得到 js,每个 ajax 请求等等。只是一个想法。