有一个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: Cannot resolve keyword 'expire' into field.
我不认为你可以像文档所说的那样在字段查找中使用属性
The field specified in a lookup has to be the name of a model field
https://docs.djangoproject.com/en/1.8/topics/db/queries/#field-lookups最后将expire添加到模型,计算save方法的值。现在我可以了
不,不能基于模型方法或属性执行查找。Django ORM不允许这样做。
查询被编译为SQL,在数据库级别发送和处理,而属性是Python代码,数据库对此一无所知。这就是为什么Django过滤器只允许我们使用数据库字段的原因。
可以做到:
不能这样做:
相反,您可以使用列表理解来获得所需的结果。
上面将给出在
days
列表中具有expire
值的Order
对象的列表。相关问题 更多 >
编程相关推荐