python - django- concatenate(year,month)_range=[start_date,end_date] 错误

标签 python django datetimepicker

在 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

最佳答案

要使此功能生效,您需要执行几个步骤:

  1. 将表单域配置为接受“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 并要求它存储除完整日期以外的任何内容 .

  1. 在您的模型中,像这样设置默认值:

    start_date=models.DateField(auto_now_add=True)
    

您必须在 DateField 中存储完整日期,因此只需让它默认为当前日期即可。这仍然会在下面给出正确的结果(假设该月的哪一天对您来说无关紧要)。

  1. 您的查询逻辑现在如下所示:

    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/

相关文章:

python - 在括号之间插入乘号

python - 在 python 3 中使用全局变量

python - 在代理后面下载 gensim 模型

css - 指向模板中的自定义设置

python - 我可以从 Django 模板访问字典中的特定键值吗?

c# - WPF 4.0 的日期时间选择器

angularjs - 如何为 Angular js 应用程序添加 "datetime"选择器?

python - 使用 pexpect scp 到远程服务器

vb.net - 如何在 VB.NET 中制作只读日期时间选择器

Django 属性错误 : object has no attribute 'assertContains'