我需要过滤早于 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/