当存储日期<=最后24小时时,Django返回计数

use*_*426 8 python django

我是菜鸟,所以这可能是一个简单的问题,但它让我难过.

我正在创建一个测试表单,以便每次用户创建文档时,创建文档的日期和时间都将存储在CreatedDocumentDetails模型中.我还没有实现这个代码,我专注于在过去24小时内返回计数.我暂时手动将值插入到CreatedDocumentDetails模型中.

问题是我想要计算用户在过去24小时内创建的文档.我可以返回用户保存文档的总数,但我不确定如何将现在的日期和时间字段写入if语句以返回过去24小时内创建的文档数.

我有以下型号:

class CreatedDocumentDetails(models.Model):
    user = models.ForeignKey(User)
    created_document_timestamp = models.DateTimeField(auto_now_add=True, blank=True)

    def __unicode__(self):
        return unicode(self.user)
Run Code Online (Sandbox Code Playgroud)

这是相关的views.py代码:

def get_created_documents(user):
    created_documents = len(CreatedDocumentDetails.objects.filter(user=user))
    return created_documents
Run Code Online (Sandbox Code Playgroud)

我假设我以某种方式将now date字段插入到上面的get_created_documents视图代码的过滤器中.

Dan*_*man 22

首先,您现有的代码是非常错误的.您永远不应该len对您不需要迭代的查询集执行操作:它无缘无故地获取所有数据.相反,使用count():

created_documents = CreatedDocumentDetails.objects.filter(user=user).count()
Run Code Online (Sandbox Code Playgroud)

其次,既然你已经有了一个条件 - 在用户身上 - 那么添加另一个就不会太难了.你只需要一个日期比较:

date_from = datetime.datetime.now() - datetime.timedelta(days=1)
created_documents = CreatedDocumentDetails.objects.filter(
     user=user, created_document_timestamp__gte=date_from).count()
Run Code Online (Sandbox Code Playgroud)

您也可以考虑重命名您的函数及其变量:您实际上并没有获取创建的文档,而是计算它们,所以count_created_documents或者get_created_documents_count更好的名称.

  • @ user4307426使用`import datetime`或`datetime.now() - timedelta(days = 1)`.`datetime`模块包含一个`datetime`对象,所以这可能会引起一些混乱. (3认同)