- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 SQL 中,有分隔列“年”和“月”,现在基于 jquery 日期时间选择器。我可以从表单中获取格式为 yyyymm 的日期条目,例如 201012。
问题是如何根据django form的日期输入范围来过滤数据库。
以下是views.py的一部分,queryset语句不正确。请帮忙指正。
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)
另一个问题是:
因为它只是 YYYYMM,所以如果我像下面这样定义 start_date,它将与 html 中的日期格式 (YYYYMM) 不匹配。那么我怎样才能改变 models.py。
我试过类似的东西:
start_date=models.DateField(auto_now=False, auto_now_add=False,default=datetime.now().strftime("%m.%Y")) but it is not correct.
模型.py:
start_date=models.DateField(auto_now=False, auto_now_add=False)
end_date=models.DateField(auto_now=False, auto_now_add=False)
表单.py
start_date=forms.DateField(widget=DateInput(),required=False)
end_date=forms.DateField(widget=DateInput(),required=False)
编辑后追溯
File "C:\Python27\lib\site-packages\django-1.8.3-py2.7.egg\django\core\handlers\base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python27\lib\site-packages\django-1.8.3-py2.7.egg\django\views\generic\base.py" in view
71. return self.dispatch(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django-1.8.3-py2.7.egg\django\views\generic\base.py" in dispatch
89. return handler(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django-1.8.3-py2.7.egg\django\views\generic\list.py" in get
159. self.object_list = self.get_queryset()
File "C:\Users\user\Desktop\xxxx\views.py" in get_queryset
90. start_date = datetime.strptime(form.cleaned_data['start_date'], '%Y%m') # format is like 201012
Exception Type: TypeError at /result_list/
Exception Value: must be string, not datetime.date
最佳答案
要使此功能生效,您需要执行几个步骤:
将表单域配置为接受“YYYYMM
”格式的日期。在您的表单类中:
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)
关于python - django- concatenate(year,month)_range=[start_date,end_date] 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33363009/
在 SQL 中,有分隔列“年”和“月”,现在基于 jquery 日期时间选择器。我可以从表单中获取格式为 yyyymm 的日期条目,例如 201012。 问题是如何根据django form的日期输入
我是一名优秀的程序员,十分优秀!