gpt4 book ai didi

python - 自动计算属性字段的 Django 过滤器查询

转载 作者:太空狗 更新时间:2023-10-29 20:35:11 27 4
gpt4 key购买 nike

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.

最佳答案

不,您不能根据模型方法或属性执行查找。 Django ORM 不允许这样做。

查询被编译为 SQL,以便在数据库级别发送和处理,而属性是 Python 代码,数据库对它们一无所知。这就是 Django 过滤器只允许我们使用数据库字段的原因。

可以这样做:

Order.objects.filter(created=..) # valid as 'created' is a model field

不能这样做:

Order.objects.filter(expires=..) # INVALID as 'expires' is a model property

您可以改用列表理解来获得所需的结果。

[obj for obj in Order.objects.all() if obj.expire in days]

上面会给我 Order 对象的列表,在 days 列表中具有 expire 值。

关于python - 自动计算属性字段的 Django 过滤器查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31658793/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com