django - Django - 从(日期选择器过滤数据)获取月份和年份
问题描述
这是forms.py
class dateFilter(forms.Form):
date = forms.DateField(input_formats=['%Y-%M-%D'],label='',required=False,
widget=forms.DateInput(attrs={
"placeholder": " Select a date",
"class": "dateClass",
"id": "datepicker",
"name": "dateFilter"}))
这是我的意见.py
def bsoCharts(request):
#-----------Filter Section------------------------------------------
dateFilter = forms.dateFilter()
FilteredDate = request.POST.get('date')
return render(request, 'BSO/BSO_dashboard2.html', 'dateFilter':dateFilter )
这是我呈现表单的模板:
<div class="container">
<div class="row">
<div class="col-12 col-sm-12 col-md-6 col-lg-4">
<form action="{% url 'BSO:BSO_Dashboard' %}" method="post" autocomplete="off">
{% csrf_token %}
{{dateFilter}}
</form>
</div>
</div>
</div>
这是我的日期选择器的 JQuery:
<script>
$("#datepicker").datepicker( {
changeMonth: true,
changeYear: true,
showButtonPanel: true,
dateFormat: 'yy-m-d',
onSelect: function(dateText, inst) {
$(this).parents("form").submit();
}
});
这是日期选择器的照片图像,以及选择日期后的值:
使用此 get 方法将结果返回到我的 views.py 后:
FilteredDate = request.POST.get('date')
我想使用以下方法仅获取月份和年份,以便可以将其用作另一个查询集的过滤器(包含):
FilteredDate.month
但是,它给了我这个错误:
Django版本:2.1.5异常类型:AttributeError异常值:'str'对象没有属性'month'
请帮忙!
解决方案
request.POST
是提交的原始值字典。所以字段几乎总是字符串(或浮点数/整数)。绝不是它们所代表的 python 值。
在使用您正在做的 Django 表单时,您应该始终调用form.is_valid()
以清理表单,然后从以下位置获取值form.cleaned_data
:
form = forms.dateFilter(request.POST) # create the form with the data submitted
if form.is_valid(): # check the form is valid (which populates cleaned_data at the same time)
filtered_date = form.cleaned_data.get('date') # this is a python date
if filtered_date: # since date is optional, check it was passed
month = filtered_date.month