django - 我需要帮助将存储在 DateTimeField 中的年份与当前年份进行比较并计算匹配的项目数
问题描述
我有一份程序清单,上面有日期显示它们应被审查的时间。我正在尝试计算本年度到期的程序并在我的网页上显示该数字。(例如,如果我的数据库中有 x 个今年到期的程序。我希望对它们进行计数并将总数存储在一个变量中,我可以将其传递给我的网页并显示“程序需要今年要审核的是:x")
不确定如何从 DateTimeField 中正确提取年份并与 datetime.now().year 中的当前年份进行比较。
谢谢。
我曾尝试使用 .count,但根据我使用的变量,我会遇到各种错误。有关错误消息和我尝试过的内容的更多说明,请参阅我的代码。
views.py
# gets current year and stores it in currentYear.
currentYear = datetime.now().year
# opmToReview = posts.objects.filter(reviewYear = 'currentYear').count()
# gives error - Cannot resolve keyword 'reviewYear' into field.
# opmToReview = posts.objects.filter(reviewDue = 'currentYear').count()
# gives error - 'currentYear' value has invalid format.
#Tried this too but, doesn't work
# testing for comparing dates
def opmToReview(request):
count = 0
for post in posts
if currentYear == reviewYear
count = count + 1
return render(request, 'opmStatistics.html', {'currentYearReview' : currentYearReview})
models.py
class posts(models.Model):
OPMnumber = models.CharField(max_length = 30)
title = models.TextField()
contacts = models.CharField(max_length = 50)
dateLastReviewed = models.DateTimeField()
reviewDue = models.DateTimeField()
status = models.CharField(max_length = 20)
assignedTo = models.CharField(max_length = 30)
comments = models.TextField()
#used to extract the year from reviewDue date
def reviewYear(self):
return self.reviewDue.strftime('%Y')
'''
Expected results is the total number of procedure needed to be review for current year.
解决方案
由于reviewDue
是 a DateTimeField
,因此您不能只传递这样的整数2019
。ORM 应该如何知道您在此处查找年份,而不是例如自 1970 年 1 月 1 日以来的秒数。
但是,您可以在此处使用__year
查找 [Django-doc]:
def opmToReview(request):
currentYear = datetime.now().year
count = posts.objects.filter(reviewDue__year=currentYear).count()
return render(request, 'opmStatistics.html', {'count' : count})
注意:PEP-8 建议类名以大写开头,而 Django 建议模型名是单数的,所以
Post
不要使用posts
. 此外,PEP-8 表示属性应该全部小写,并带有下划线作为单词分隔符,所以opm_to_review
和review_due
.
注意:在视图中提取年份更安全,因为 (a) 在这里您使用了一个局部变量,该变量不能由某些视图/函数/...设置,具有副作用;(b) 如果您的服务器在 12 月 31 日大约 23:59:59 运行,那么它仍然会在一秒钟后使用旧年份,直到您决定重新启动服务器。
推荐阅读
- docker - NLog 控制台附加程序确实写入 .NET 中的 docker 日志
- c# - EF Core - 如何根据使用的数据库提供程序配置列类型
- java - 如何在 Android 的 EditText 中移动光标
- tensorflow2.0 - 将输入张量从 CPU 复制到 GPU 以运行 GatherVe 失败:Dst 张量未初始化。[操作:GatherV2]
- reactjs - 自定义 AmplifySignOut 的布局
- javascript - 如何在javascript中按id嵌套数据过滤和分组?
- c# - 如何在模型 csharp 中使用 DynamicObject
- html - 展开元素“向上”而不是“向下”
- laravel - 是否可以在 Laravel Nova 中自定义右上角的用户菜单?
- python - 如何在 matplotlib 图中使用外部颜色图(例如 plotly)?