Django 如何将日期值转换为日期类型进行比较?
我正在从用户那里读取一个日期值,需要在django中对其进行日期比较。我找不到任何答案如何做到这一点。我真正需要的是将字符串转换为date,这样就可以比较它的相等/小于/大于值 我得到如下形式值Django 如何将日期值转换为日期类型进行比较?,django,django-forms,Django,Django Forms,我正在从用户那里读取一个日期值,需要在django中对其进行日期比较。我找不到任何答案如何做到这一点。我真正需要的是将字符串转换为date,这样就可以比较它的相等/小于/大于值 我得到如下形式值 start_date = form_new_task.cleaned_data['start_date'] 我需要将开始日期值与date.today()进行比较,以确定相等/小于/大于 有人能告诉我做这件事的确切方法吗。我没有从输入中读取任何时间部分,因为我将表单输入设置为date字段(而不是date
start_date = form_new_task.cleaned_data['start_date']
我需要将开始日期值与date.today()
进行比较,以确定相等/小于/大于
有人能告诉我做这件事的确切方法吗。我没有从输入中读取任何时间部分,因为我将表单输入设置为date
字段(而不是datetime
)
更新为完整代码:
class Form_Task(forms.Form):
start_date = forms.DateField() # declaration
form_new_task = Form_Task(request.POST)
if form_new_task.is_valid():
start_date = form_new_task.cleaned_data['start_date']
delta = start_date - date.today()
if delta.days < 0:
err_str = 'Start date cannot be a past date.'
elif delta.days == 0:
....
....
在声明中:
class Form_Task(forms.Form):
start_date = forms.DateField(label='Check-In Date', initial='2017-05-05',
widget=forms.DateInput(attrs={'class': 'form-control,'size': 10}))
在POST请求中:
form_new_task = Form_Task(request.POST)
if form_new_task.is_valid():
start_date = form_new_task.cleaned_data['start_date']
if start_date < date.today()
err_str = 'Start date cannot be a past date.' # here I don't get this assigned. It's evaluate to False.
form\u new\u task=form\u task(request.POST)
如果表单\u新建\u任务。是否有效()
开始日期=表单新任务。已清理的数据['开始日期']
如果开始日期<日期今天()
err_str='开始日期不能是过去的日期。#这里我没有指定此日期。这是错误的。
您可以像这样比较日期
from datetime import datetime
if start_date < datetime.today().date():
err_str = 'Start date cannot be a past date.'
从日期时间导入日期时间
如果开始日期
我找到了这样做的方法,并认为这会对其他人有所帮助。我已经将start_date字段声明为DateField,当我读取该值时,它将作为一个日期类型对象(我认为是datetime)。所以我必须在这两天内得到一个差值
表格:
class Form_Task(forms.Form):
start_date = forms.DateField() # declaration
form_new_task = Form_Task(request.POST)
if form_new_task.is_valid():
start_date = form_new_task.cleaned_data['start_date']
delta = start_date - date.today()
if delta.days < 0:
err_str = 'Start date cannot be a past date.'
elif delta.days == 0:
....
....
在post请求处理程序方法中:
class Form_Task(forms.Form):
start_date = forms.DateField() # declaration
form_new_task = Form_Task(request.POST)
if form_new_task.is_valid():
start_date = form_new_task.cleaned_data['start_date']
delta = start_date - date.today()
if delta.days < 0:
err_str = 'Start date cannot be a past date.'
elif delta.days == 0:
....
....
form\u new\u task=form\u task(request.POST)
如果表单\u新建\u任务。是否有效()
开始日期=表单新任务。已清理的数据['开始日期']
delta=开始日期-日期。今天()
如果delta.days<0:
err_str='开始日期不能是过去的日期。'
elif delta.days==0:
....
....
你的问题不清楚。如果start\u date
是一个DateField
,那么cleaned\u data['start\u date']
应该已经是一个日期实例。使用.date()
方法这将帮助您查看,因为它已经是一个日期。您实际上不需要转换任何内容。此外,此比较应作为表单验证的一部分进行。您应该在表单类上的clean\u start\u date
方法中执行此操作。您所说的“我不能简单地比较它们”是什么意思?我不能将start\u date
传递给strtime
。它说strptime()参数1必须是str,而不是datetime.date,这意味着它已经是一个日期对象了。他们解释了为什么我不能将它与date.today()
进行比较。我需要正确的函数或代码来比较这些。我也不能调用datetime.datetime.today().date()
。它给出了相同的错误。如果它是一个日期对象,那么为什么不能将它与date.toda()进行比较??这应该行得通。请参考我贴出的答案。我认为这非常清楚,因为我可以根据返回的值比较各种情况。如果您有日期字段
,则清理的数据['start\u date']
将是日期
,而不是日期时间
。如果需要,可以创建增量,但不必这样做。只要如果开始日期
就可以了。最后,正如Daniel所建议的,最好在表单中添加一个clean\u start\u date
方法,并在那里进行检查(有关更多信息,请参阅)。谢谢@Alasdair。我试过那种方法,但不起作用。但是三角洲对我来说很有效。