【问题标题】:Django - get Month and Year from (Datepicker filter data)Django - 从(日期选择器过滤数据)获取月份和年份
【发布时间】:2019-02-28 13:30:39
【问题描述】:

这是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();
          }
});

这是日期选择器的照片,选择日期后的值:

enter image description here

使用此 get 方法将结果返回到我的 views.py 中后:

   FilteredDate = request.POST.get('date')

我想使用以下方法仅获取月份和年份,以便我可以将其用作另一个查询集的过滤器(包含):

   FilteredDate.month

但是,它给了我这个错误:

Django 版本:2.1.5 异常类型:属性错误 异常值:“str”对象没有属性“month”

请帮忙!

【问题讨论】:

    标签: django django-models django-rest-framework django-forms django-views


    【解决方案1】:

    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
    

    【讨论】:

    • 在没有第二个 if 语句的情况下跟随您的代码,它可以工作!谢谢!
    • 您在表单中声明了date 字段为非必填字段,因此您的表单在没有日期的情况下有效。尝试在不选择日期的情况下发布,您就会明白为什么需要第二个 if 语句。
    • 现在由于某种原因我不能使用 if 语句中声明的月份变量。它给了我这个错误:(异常值:分配前引用的局部变量“月”)
    • 当然,如果你在 if 中声明一个变量,你不应该在它之外使用它,因为它不能保证存在。您需要将代码移动到if 中,或者在else 中找到一个替代的默认值来分配给它。或者重新考虑你的业务逻辑(date 真的是可选的吗?)
    • 是否可以将filtered_date.month 附加到if 语句之外的空变量中?我需要在我的过滤器查询集上使用它。
    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多