Django 按外键值过滤

问题描述 投票:0回答:1

假设我有两个模型

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}
指定的天数?

python django django-orm django-filter
1个回答
1
投票

您可以使用 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,但可能不适用于其他数据库(未确认)。

© www.soinside.com 2019 - 2024. All rights reserved.