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

时间:2015-10-27 08:28:32

标签: python django datetimepicker

在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) 

1 个答案:

答案 0 :(得分:1)

要实现这一目标,您需要采取以下几个步骤:

  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)
    
  2. 这将允许Django自动解析您的表单数据并将其正确保存为datetime对象。请注意,它将存储为完整日期(默认为本月的第一天) - 您无法使用DateField并要求其存储除完整日期之外的任何内容

    1. 在您的模型中,设置默认值如下:

      start_date=models.DateField(auto_now_add=True)
      
    2. 您必须在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)