创建一个django查询以获取特定持续时间的条目

时间:2013-04-03 11:18:45

标签: python django

在我的django应用程序中,条目具有此模型

    from models import PENDING,CLOSED
    class Entry(models.Model):
        ...
        name = models.CharField(max_length=200)
        status = models.CharField(max_length = 4,choices=status_values ,default = PENDING)
        creation_date = models.DateTimeField(default=datetime.datetime.now)           
        closed_date = models.DateTimeField(null=True)

我需要找到Entry状态为CLOSED的所有closed_date以及关闭时间超过4天的所有creation_date。我没有在模型中使用任何称为持续时间的字段,但希望能够计算(closed_date-creation_date).daysentries = Entry.objects.filter((closed_date-creation_date).days > 4 )之间的差异,如下所示

In [9]:Entry.objects.filter((closed_date - creation_date).days > 4)

我尝试将查询编写为

NameError

在django shell中我尝试了这个

In [9]:  entry1 =  Entry.objects.get(name='myentry')

In [10]: entry1.closed_date
Out[10]: datetime.datetime(2013, 4, 3, 14, 2, 4, 442518)

In [11]: entry1.creation_date
Out[11]: datetime.datetime(2013, 3, 17, 0, 0)

这会产生In [12]: Task.objects.filter(status='CLOSED',(closed_date - creation_date).days > 4) SyntaxError: non-keyword arg after keyword arg (<ipython console>, line 1)

  

NameError:名称'closed_date'未定义

但是当我尝试获取一个条目并访问它的closed_date字段时,

{{1}}

我无法弄清楚我在这里做错了什么..查询错了吗?

另外,当我尝试这个时,我收到语法错误:

{{1}}

1 个答案:

答案 0 :(得分:2)

您可以使用F()表达式来比较字段。所以你可以做类似

的事情
entries = Entry.objects.filter(closed_date__gt=F('creation_date') + timedelta(days=4))