我想根据@属性字段过滤生成一个查询集。我的模型如下。
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是数据库字段
1条答案
按热度按时间gudnpqoy1#
@属性装饰器允许您像访问常规属性一样访问模型字段。
这意味着您可以像调用变量一样调用 provision_start_date:
开始日期= prwh.供应开始日期
另外,您可以像这样检查
如果预配开始日期〈今天:“返回某些内容”