gpt4 book ai didi

django - 在 Django 中使用 F() 和 timedelta 进行查询

转载 作者:行者123 更新时间:2023-12-04 04:32:04 26 4
gpt4 key购买 nike

我有以下模型:

class Process(models.Model):
title = models.Charfield(max_length=255)
date_up = models.DateTimeField(auto_now_add=True)
days_activation = models.PositiveSmallIntegerField(default=0)

现在我需要查询所有 Process已过期的对象,根据其值 days_activation .

我试过
from datetime import datetime, timedelta

Process.objects.filter(date_up__lte=datetime.now()-timedelta(days=F('days_activation')))

并收到以下错误消息:

TypeError: unsupported type for timedelta days component: F



我当然可以在 Python 中做到:
filter (lambda x: x.date_up<=datetime.now() - timedelta(days=x.days_activation), 
Process.objects.all ()),

但我真的需要制作一个 django.db.models.query.QuerySet .

最佳答案

你必须扩展聚合。像下面这样:

from django.db import models as DM

class BaseSQL(object):
function = 'DATE_SUB'
template = '%(function)s(NOW(), interval %(expressions)s day)'

class DurationAgr(BaseSQL, DM.Aggregate):
def __init__(self, expression, **extra):
super(DurationAgr, self).__init__(
expression,
output_field=DM.DateTimeField(),
**extra
)

Process.objects.filter(date_up__lte=DurationAgr('days_activation'))

希望,它会为你工作。 :)

关于django - 在 Django 中使用 F() 和 timedelta 进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6158859/

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