使用@属性字段过滤django

goucqfw6  于 2022-12-01  发布在  Go
关注(0)|答案(1)|浏览(150)

我想根据@属性字段过滤生成一个查询集。我的模型如下。

class PED(models.Manager):
    def ped(self):
        ped = self.provision_start_date + relativedelta(months = self.po_duration )
        return ped

`class PrHW(models.Model):
    po_duration = models.IntegerField(null=True)
    provision_start_date = models.DateField(null=True, blank=True)
    description = models.TextField(blank=True, null=True)

    @property
    def provision_end_date(self):
        provision_end_date = self.provision_start_date + relativedelta(months=self.po_duration)
        return provision_end_date`

    objects = models.Manager()
    ped = PED()

由于“provision_end_date”是一个计算字段,它不是PrHW.objects.all()的一部分,因此我无法使用它作为过滤器选项来创建查询集(例如,生成provision_end_date早于今天的PrHW对象列表-这将生成“provision_end_date”不是有效字段的错误;我试着创建自定义模型管理器,但是我仍然无法访问自定义管理器中的@属性字段或其他字段,如“provision_start_date”。可能这是直接的,但是即使经过几次搜索,也无法找到它的窍门。任何帮助都是感激的。
我还包含了模型管理器代码,我试图将provision_end_date函数的计算移到其中。当我运行PrHW.ped.ped()时,它抛出错误:“属性错误:'PED'对象没有属性'provision_start_date'“,其中provision_start_date是数据库字段

gudnpqoy

gudnpqoy1#

@属性装饰器允许您像访问常规属性一样访问模型字段。
这意味着您可以像调用变量一样调用 provision_start_date
开始日期= prwh.供应开始日期
另外,您可以像这样检查
如果预配开始日期〈今天:“返回某些内容”

相关问题