我需要过滤早于 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?是否可以?

最佳答案

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

首先,您需要将 Plan 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/

10-12 00:14