Django模板的日期过滤器导致表单值消失

时间:2019-05-30 09:12:06

标签: python django modelform

我正面临着一个奇怪的难题。如果表单未经验证,则Django DATE_INPUT_FORMATS = ['%Y/%m/%d', '%Y-%m-%d'] class PromotionModelForm(ModelForm): last_promotion_date = forms.DateField(input_formats=DATE_INPUT_FORMATS) class Meta: model = Professor fields = ['last_promotion_date'] 过滤器可防止显示表单值。这是我的ModelForm:

def first-view(request):
    professor = get_object_or_404(Professor, 
user__username=request.user)
    form = SomeForm(request.POST or None, instance=professor)
    if form.is_valid():
        form.save()
        context = {"form": form}
        return redirect('/first-view')
    else:
        return render(request, 'core/first-view.html', 
context={'form':form})

这是我的观点:

<form class="inner_box" method="POST" action="{% url 'core:first_view' %}" name="">
            {% csrf_token %}
          <table>
            <tr class="table_header">
              <th colspan="8" class="right">last_promotion_date</th>
              <td><input type="text" name="last_promotion_date" onfocus="displayDatePicker(this.id);" class="date_picker" value="{{ form.last_promotion_date.value|date:"Y/m/d"}}"</td>
            </tr>
</form>

这是模板:

date:"Y/m/d"

这是问题所在 如果表单无效,并且我保留了date:"Y/m/d"过滤器,则具有该过滤器的表单值不会显示在呈现的响应中。 但是,如果我从模板变量中删除date:"Y/m/d"过滤器,则会将该表单呈现为包括无效输入。

date:"Y/m/d"过滤器的问题仅在表单未经验证时才会发生。如果表单未经验证,则在“ GET”请求中呈现的相同日期值将在“ POST”请求的响应中消失。

这很令人困惑。我在这里想念什么?为什么在存在list.items()过滤器的情况下无效表单的值不会出现?

1 个答案:

答案 0 :(得分:0)

如果该字段无效,则该值很可能不是正确的date对象或任何可以解析为有效日期的值。这就是为什么对值使用|date不会产生任何结果的原因。