【问题标题】:Comparing offset-naive and -aware datetimes in Django比较 Django 中的 offset-naive 和 -aware 日期时间
【发布时间】:2017-09-16 11:00:24
【问题描述】:

假设我有一个数组中的日期列表,我想只保留已过期的日期以便以后删除它们。但是我试图在数组中的每个日期上传递一个 IF 条件并只打印那些已经过期的。问题是我不明白如何用 Python 做到这一点。

这是我的想法:

# model.objects.all() contains the dates of each objects

for data in model.objects.all():
    if data.created_date < datetime.datetime.now() - datetime.timedelta(seconds=20):
        print(data.created_date) 

上面的代码给了我这个错误:

TypeError: 无法比较 offset-naive 和 offset-aware 日期时间

我做错了什么,解决办法是什么?

【问题讨论】:

  • Python 没有数组。你在那里的东西看起来像一个 Django QuerySet。您应该使用正确的.filter() 调用对其进行过滤。
  • @KlausD。如何按过期时间过滤 Django 查询集?
  • 请修改您的问题以包含解决实际问题所需的所有信息。添加您的模型,标记为 django,解释任务。您的方法似乎确实是 Django 的最佳实践方式。
  • @KlausD。我删除了我的问题,因为它超出了这个问题的范围,你给我的建议解决了我的问题,谢谢。

标签: python django django-models


【解决方案1】:
from django.utils.timezone import now, timedelta

expired_date = now() - timedelta(seconds=20)

如果你想看他们:

model_list = YourModel.objects.filter(created_date__lt=expired_date)

for model_item in model_list:
    print model_item.created_date

如果您只想删除它们:

YourModel.objects.filter(created_date__lt=expired_date).delete()

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 2021-03-23
    • 2018-02-27
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2020-12-16
    • 1970-01-01
    相关资源
    最近更新 更多