Django过滤器查询与属性字段自动计算 [英] Django filter query on with property fields automatically calculated

查看:1007
本文介绍了Django过滤器查询与属性字段自动计算的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有Django订单模型,属性字段自动压缩。如何进行过滤器查询。

  class Order(models.Model):

@property
def expire(self):
return self.created + datetime.timedelta(days = self.days_left())

@property
def days_left(self)
return self.recurrence_period * self._recurrence_unit_days [self.recurrence_unit]

从今天起的1,3,7个日期时间

  settings.SUBSCRIPTION_EXPIRATION_REMIND = [1,3,7] 

days = map(lambda x:datetime.date.today()+ datetime.timedelta(days = x),settings.SUBSCRIPTION_EXPIRATION_REMIND)

[datetime.date(2015,7,28)
datetime.date(2015,7,30),
datetime.date(2015,8,3)]

如何通过ORM查询过滤

  Order.objects.filter(expire__in = days)

Django正在抛出错误。

  FieldError:无法解析关键字到期进入字段。 


解决方案

结束添加到期模型,计算值保存方法。现在我可以做

  Order.objects.filter(expire__in = days)
/ pre>

There is Django Order model with property fields automatically calucated. How to do a filter query.

class Order(models.Model):

    @property
    def expire(self):
        return self.created + datetime.timedelta(days=self.days_left())

    @property
    def days_left(self):
        return self.recurrence_period  * self._recurrence_unit_days[self.recurrence_unit]

Calculation done to get 1,3,7 datetime days from today

settings.SUBSCRIPTION_EXPIRATION_REMIND = [1, 3, 7]

days = map(lambda x: datetime.date.today() + datetime.timedelta(days=x), settings.SUBSCRIPTION_EXPIRATION_REMIND)

[datetime.date(2015, 7, 28),
 datetime.date(2015, 7, 30),
 datetime.date(2015, 8, 3)]

How to filter by ORM query

Order.objects.filter(expire__in=days)

Django is throwing error.

FieldError: Cannot resolve keyword 'expire' into field.

解决方案

Ended up adding expire to model, calculating the value on save method. Now i can do

 Order.objects.filter(expire__in=days)

这篇关于Django过滤器查询与属性字段自动计算的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆