gpt4 book ai didi

python - Django - 过滤早于 X 天的对象

转载 作者:行者123 更新时间:2023-11-28 16:20:32 24 4
gpt4 key购买 nike

我需要过滤早于 X 天数的对象。我意识到这里存在这个问题:django filter older than day(s)?

但是,我并没有尝试这样做,因为在我的例子中,天数存在于模型中:

class Post(models.Model):
title = models.CharField(max_length=200)
description = models.CharField(max_length=500)
createdAt = models.DateTimeField(default=datetime.now, blank=True)
plan = models.ForeignKey(Plan) # This model has the number of days

这是我目前的查询:

编辑:我更改了 the_post.plan.days 的 days.plan 部分,这意味着我用来比较的天数在每个帖子的 plan 字段。

    Post.objects.filter(createdAt__lte=datetime.now() - timedelta(days=the_post.plan.days))

请注意查询的 plan.days 部分。我如何为这个查询引用 the_post.plan.days?可能吗?

最佳答案

在您的计划模型中稍作调整,确实可以做您想做的事。

首先,您需要将计划 days 字段(可能是 IntegerField)更改为 DurationField .

现在问题是我们必须使用 ExpressionWrapper在 Postgres 中获得与在 Python 中获得的结果完全相同的结果(如果您要在单独的查询中获取计划)。

最后,您的查询应该是这样的:

from django.db.models import F, ExpressionWrapper, DateTimeField
from django.utils import timezone

Post.objects.annotate(target_date=ExpressionWrapper(timezone.now() - F('plan__days'), output_field=DateTimeField())).filter(createdAt__lte=F('target_date'))

关于python - Django - 过滤早于 X 天的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40617302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com