我是菜鸟,所以这可能是一个简单的问题,但它让我难过。
我正在创建一个测试表单,以便每次用户创建文档时,创建文档的日期和时间都将存储在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)
以下是相关的views.py代码:
def get_created_documents(user):
created_documents = len(CreatedDocumentDetails.objects.filter(user=user))
return created_documents
我假设我以某种方式将now date字段插入上面get_created_documents视图代码的过滤器中。
答案 0 :(得分:21)
首先,您现有的代码非常错误。您永远不应该在您不需要迭代的查询集上执行len
:它无缘无故地获取所有数据。相反,请使用count()
:
created_documents = CreatedDocumentDetails.objects.filter(user=user).count()
其次,既然你已经有了一个条件 - 在用户身上 - 它就不会太难以添加另一个条件。你只需要一个日期比较:
date_from = datetime.datetime.now() - datetime.timedelta(days=1)
created_documents = CreatedDocumentDetails.objects.filter(
user=user, created_document_timestamp__gte=date_from).count()
您也可以考虑重命名您的功能及其变量:您实际上并没有获取创建的文档,而是计算它们,因此count_created_documents
或get_created_documents_count
会更好