【问题标题】:Django filter by dateDjango按日期过滤
【发布时间】:2019-03-01 20:15:24
【问题描述】:

我有

Class Profile(models.Model)
    turn_off_date = models.DateTimeField(null= True, blank = True,auto_now = False)

我需要找到从现在起 x 天后到期日期 = 确切的所有个人资料记录。 我该怎么做呢? 我可以考虑遍历所有配置文件并手动比较日期,但这似乎无效

更新:

我需要按日期过滤,而不是重复问题中的日期时间字段

现在我正在这样做:

profiles = Profile.objects.all()
for profile in profiles:
        if(profile.days_left() == x):
           print(profile.days_left())

在我的 Profile 模型中,我定义了一个方法:

def days_left(self):
        turn_off_date = self.turn_off_date

        days_left = (turn_off_date - datetime.now()).days
        if days_left < 0:
            days_left = 0
        return days_left

【问题讨论】:

  • 你可能需要检查这个filter by date range
  • 不是完全重复,但您的问题含糊不清。 expiration date= x days from now 是什么意思?正是那个日期或之前/之后?
  • @Selcuk 准确
  • date 而不是datetime 过滤是什么意思?你试过什么?

标签: django python-3.x


【解决方案1】:

您可以通过__date 查询给定日期

对于日期时间字段,将值转换为日期。允许链接其他字段查找。采用日期值。

.filter(turn_off_date__date=(datetime.now()+timedelta(days=x)).date())

【讨论】:

    【解决方案2】:

    你可以使用range来实现这个,

    例子:

    Profile.objects.filter(turn_off_date__range=(start_date, end_date))
    

    【讨论】:

      【解决方案3】:

      我想这样的事情会很好用:

      从 Django 1.9 开始,您可以使用 __date 字段查找,就像您一样 在你的问题中提到过。对于旧版本,您必须 用其他方法。

      感谢https://stackoverflow.com/a/45735324/2950593

      【讨论】:

        猜你喜欢
        • 2013-08-16
        • 2016-07-10
        • 2020-03-25
        • 1970-01-01
        • 1970-01-01
        • 2014-02-26
        • 2023-03-23
        • 2020-05-25
        • 1970-01-01
        相关资源
        最近更新 更多