python Django按ForeignKey值过滤

gdx19jrr  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(95)

假设我有两个模型

class DocumentType(BaseModel):
    name = models.CharField(max_length=128)
    code = models.CharField(max_length=128)
    exp_days = models.PositiveIntegerField("Remind me before (Days)", blank=True, null=True)

    def __str__(self):
        return str(self.name)

class Document(BaseModel):
    type = models.ForeignKey("masters.DocumentType", on_delete=models.PROTECT)
    date_of_expiry = models.DateField(blank=True, null=True)
    attachment = models.FileField(blank=True, null=True)
    
    def __str__(self):
        return str(self.employee)

如何检索到期日期与指定天数(用{exp_days}表示)相匹配的文档?我有一个这样的过滤器,用于在未来30天内到期的文档:

documents = Document.objects.filter(date_of_expiry__lte=today+timedelta(days=30))

如何调整此过滤器以匹配{exp_days}指定的天数?

k97glaaz

k97glaaz1#

可以使用表示模型字段值的F()对象。因此要从相关模型中引用exp_days,可以使用F('type__exp_days')
来自Lutz Prechelt的答案显示了如何将F()表达式移动到时间增量之外。
下面是修改后的代码

from django.db.models import F

documents = Document.objects.filter(date_of_expiry__lte=today+timedelta(days=1)*F('type__exp_days'))

正如提到的here,这将与PostgreSQL,但可能不与其他数据库(未确认)。

相关问题