python – Django:如何将分隔的整数字段(年,月)连接为日期范围以过滤数据库

python – Django:如何将分隔的整数字段(年,月)连接为日期范围以过滤数据库,第1张

概述在表单中,有两个字段: class Input(models.Model): start_year=models.CharField(max_length=100) start_month=models.CharField(max_length=100) end_year=models.CharField(max_length=100) end_month=mode 在表单中,有两个字段:

class input(models.Model):    start_year=models.CharFIEld(max_length=100)    start_month=models.CharFIEld(max_length=100)    end_year=models.CharFIEld(max_length=100)    end_month=models.CharFIEld(max_length=100)    ....

在sql数据库中,有两列:year;一个月……

我想根据用户在表单中输入的内容(start_year,start_month; end_year,end_month)作为在数据库中过滤的日期范围(年,月).

XX.objects.filter(date_range = []),还是可以放入这个data_range函数?

如果需要,以下是一些相关代码.

用户输入数据的表单应用程序 – vIEws.py

def input(request):    if request.method == 'POST':        form = inputForm(request.POST)        if form.is_valID():            ...            start_year=form.cleaned_data['start_year']            start_month=form.cleaned_data['start_month']            end_year=form.cleaned_data['end_year']            end_month=form.cleaned_data['end_month']            ...            form.save()            return redirect('FilterResult')

根据用户的条目过滤数据库 – vIEws.py

class XXXVIEw(ListVIEw):    context_object_name = 'XXX'    template_name = 'XXX.HTML'    queryset = XXX.objects.all()    start_year=self.request.query_params.get('start_year',None)  /*get from the form what the user has entered    start_month=self.request.query_params.get('start_month',None)    end_year=self.request.query_params.get('end_year',None)    end_month=self.request.query_params.get('end_month',None)    objects.filter(date_range=[.....]) /*how to concatenate the year and month to put here?    if start_year,start_month,end_year,end_month are not None:                      queryset=queryset.filter(start_month=start_month,start_year=start_year,end_year=end_year,end_month=end_year)    sales=XXX.objects.filter(queryset).aggregate(Sum('sales'))    def get_context_data(self,**kwargs):        context = super(XXXVIEw,self).get_context_data(**kwargs)        context['input'] = input.objects.order_by('-ID')[:1]        return context
解决方法 如果您使用DateFIEld而不是CharFIEld(我认为您应该这样做,因为您正在处理日期),如下所示:

class input(models.Model):    # This date has the month and the year. You can set the default day     # to the 1st of every month for consistency.    startDate=models.DateFIEld()     # This also has the end month and end year.    endDate=models.DateFIEld()

您可以按照以下方式执行以下 *** 作来按范围过滤日期对象:

input.objects.filter(startDate__range=["2011-01-01","2011-01-31"])

或者,如果您想按特定月份过滤,您可以:

input.objects.filter(endDate__year='2011',endDate__month='01')

有关更多信息,请参阅此帖子:Django database query: How to filter objects by date range?和此帖子:How do I subtract two dates in Django/Python?.

我不太确定你想要完成什么,但我确信如果你使用DateFIEld而不是CharFIEld来保存日期,那就容易多了.我还建议您阅读有关DateFIEld的文档以获取更多信息(它可以在您的情况下派上用场).

总结

以上是内存溢出为你收集整理的python – Django:如何将分隔整数字段(年,月)连接为日期范围以过滤数据库全部内容,希望文章能够帮你解决python – Django:如何将分隔的整数字段(年,月)连接为日期范围以过滤数据库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存