在SQL中,有Seperpated列" year"和"月",现在基于jquery日期时间选择器。我可以以yyyymm的格式从表单中获取日期条目,例如201012。
问题是如何基于django表单日期条目范围来过滤数据库。
以下是views.py的一部分,查询集句子不正确。请帮助纠正。
(green*alpha+127)/255 + inv_alpha
另一个问题是:
因为它只是YYYYMM,所以如果我在下面定义了start_date,它将与html(YYYYMM)中的日期格式不匹配。那么如何更改models.py。
我尝试过类似的事情:
if form.is_valid():
start_date=form.cleaned_data['start_date'] <---format is like 201012>
end_date=form.cleaned_data['end_date']
queryset=Result.objects.filter(concatenate(year,month)_range=[start_date,end_date]) <!--filter in database)
models.py :
start_date=models.DateField(auto_now=False, auto_now_add=False,default=datetime.now().strftime("%m.%Y")) but it is not correct.
forms.py
start_date=models.DateField(auto_now=False, auto_now_add=False)
end_date=models.DateField(auto_now=False, auto_now_add=False)
编辑后跟踪
start_date=forms.DateField(widget=DateInput(),required=False)
end_date=forms.DateField(widget=DateInput(),required=False)
答案 0 :(得分:1)
要实现这一目标,您需要采取以下几个步骤:
将表单字段配置为接受“YYYYMM
”格式的日期。在您的Form类中:
start_date=forms.DateField(widget=DateInput(format='%Y%m'), input_formats=['%Y%m'], required=False)
end_date=forms.DateField(widget=DateInput(format='%Y%m'), input_formats=['%Y%m'], required=False)
这将允许Django自动解析您的表单数据并将其正确保存为datetime
对象。请注意,它将存储为完整日期(默认为本月的第一天) - 您无法使用DateField
并要求其存储除完整日期之外的任何内容。
在您的模型中,设置默认值如下:
start_date=models.DateField(auto_now_add=True)
您必须在DateField
中存储完整日期,因此请将其默认为当前日期。这仍将在下面给出正确的结果(假设月份的日期与您无关)。
您的查询逻辑现在如下:
if form.is_valid():
# Convert the form inputs into valid datetime objects
start_date = form.cleaned_data['start_date']
end_date = form.cleaned_data['end_date']
# These are full dates... but we only want to compare month and year, so:
queryset=Result.objects.filter(
start_date__year__gte=start_date.year,
start_date__month__gte=start_date.month,
end_date__year__lte=end_date.year,
end_date__month__lte=end_date.month)