使用自动计算的属性字段进行 Django 过滤查询 [英] Django filter query on with property fields automatically calculated

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

问题描述

有自动计算属性字段的 Django Order 模型.如何进行过滤查询.

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]

计算从今天开始得到 1,3,7 个日期时间

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)]

如何通过 ORM 查询过滤

How to filter by ORM query

Order.objects.filter(expire__in=days)

Django 抛出错误.

Django is throwing error.

FieldError: Cannot resolve keyword 'expire' into field.

推荐答案

最终将 expire 添加到模型中,计算 save 方法的值.现在我可以了

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天全站免登陆