From 197d85ce9f674e319cc7d7d0fa6e0a05dc6a46d7 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Mon, 15 Aug 2016 13:18:23 +0100 Subject: [PATCH] Disable client-side validation on Django 1.10 for multipart forms Client-side validation fails on forms with prefilled file upload fields - see https://code.djangoproject.com/ticket/27037. This is fixed in Django 1.10.1, so as a workaround we disable client-side validation (using the 'novalidate' attribute) for forms with enctype="multipart/form-data" on Django 1.10 only. Fixes #2897 --- CHANGELOG.txt | 1 + docs/releases/1.6.rst | 1 + .../modeladmin/templates/modeladmin/create.html | 4 ++-- .../settings/templates/wagtailsettings/edit.html | 4 ++-- .../templates/wagtailadmin/generic/create.html | 4 ++-- .../templates/wagtailadmin/generic/edit.html | 4 ++-- .../templates/wagtailadmin/pages/create.html | 2 +- .../templates/wagtailadmin/pages/edit.html | 2 +- .../wagtailadmin/templatetags/wagtailadmin_tags.py | 14 ++++++++++++++ .../templates/wagtaildocs/chooser/chooser.html | 4 ++-- .../templates/wagtaildocs/documents/add.html | 4 ++-- .../templates/wagtaildocs/documents/edit.html | 4 ++-- .../templates/wagtaildocs/multiple/add.html | 4 ++-- .../templates/wagtaildocs/multiple/edit_form.html | 4 ++-- .../templates/wagtailimages/chooser/chooser.html | 4 ++-- .../templates/wagtailimages/images/add.html | 4 ++-- .../templates/wagtailimages/images/edit.html | 4 ++-- .../templates/wagtailimages/multiple/add.html | 4 ++-- .../wagtailimages/multiple/edit_form.html | 4 ++-- .../templates/wagtailsnippets/snippets/create.html | 4 ++-- .../templates/wagtailsnippets/snippets/edit.html | 4 ++-- .../templates/wagtailusers/users/create.html | 4 ++-- .../templates/wagtailusers/users/edit.html | 4 ++-- 23 files changed, 54 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 3b191bcc6d..85d3d7f2b0 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -50,6 +50,7 @@ Changelog * Fix: Added file handling to support custom user add/edit forms with images/files (Eraldo Energy) * Fix: Placeholder text in modeladmin search now uses the correct template variable (Adriaan Tijsseling) * Fix: Fixed bad SQL syntax for updating URL paths on Microsoft SQL Server (Jesse Legg) + * Fix: Added workaround for Django 1.10 bug https://code.djangoproject.com/ticket/27037 causing forms with file upload fields to fail validation (Matt Westcott) 1.5.3 (18.07.2016) diff --git a/docs/releases/1.6.rst b/docs/releases/1.6.rst index b676a44aab..8739799e76 100644 --- a/docs/releases/1.6.rst +++ b/docs/releases/1.6.rst @@ -79,6 +79,7 @@ Bug fixes * Added file handling to support custom user add/edit forms with images/files (Eraldo Energy) * Placeholder text in modeladmin search now uses the correct template variable (Adriaan Tijsseling) * Fixed bad SQL syntax for updating URL paths on Microsoft SQL Server (Jesse Legg) + * Added workaround for Django 1.10 bug https://code.djangoproject.com/ticket/27037 causing forms with file upload fields to fail validation (Matt Westcott) Upgrade considerations diff --git a/wagtail/contrib/modeladmin/templates/modeladmin/create.html b/wagtail/contrib/modeladmin/templates/modeladmin/create.html index 7a88fc811e..b384679db2 100644 --- a/wagtail/contrib/modeladmin/templates/modeladmin/create.html +++ b/wagtail/contrib/modeladmin/templates/modeladmin/create.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load i18n %} +{% load i18n wagtailadmin_tags %} {% block titletag %}{{ view.get_meta_title }}{% endblock %} @@ -19,7 +19,7 @@ {% include "wagtailadmin/shared/header.html" with title=view.get_page_title subtitle=view.get_page_subtitle icon=view.header_icon tabbed=1 merged=1 %} {% endblock %} -
+ {% csrf_token %} {% block form %}{{ edit_handler.render_form_content }}{% endblock %} diff --git a/wagtail/contrib/settings/templates/wagtailsettings/edit.html b/wagtail/contrib/settings/templates/wagtailsettings/edit.html index aca58e6eef..98188e700f 100644 --- a/wagtail/contrib/settings/templates/wagtailsettings/edit.html +++ b/wagtail/contrib/settings/templates/wagtailsettings/edit.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load i18n %} +{% load i18n wagtailadmin_tags %} {% block titletag %}{% blocktrans %}Editing {{ setting_type_name}} - {{ instance }}{% endblocktrans %}{% endblock %} {% block bodyclass %}menu-settings{% endblock %} {% block content %} @@ -26,7 +26,7 @@ - + {% csrf_token %} {{ edit_handler.render_form_content }} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/generic/create.html b/wagtail/wagtailadmin/templates/wagtailadmin/generic/create.html index 4e3c1ee7ec..137c20254a 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/generic/create.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/generic/create.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load i18n %} +{% load i18n wagtailadmin_tags %} {% block titletag %}{{ view.page_title }}{% endblock %} @@ -7,7 +7,7 @@ {% include "wagtailadmin/shared/header.html" with title=view.page_title icon=view.header_icon %} - + {% csrf_token %} {% block hidden_fields %} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/generic/edit.html b/wagtail/wagtailadmin/templates/wagtailadmin/generic/edit.html index d6679c9430..8b96735cec 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/generic/edit.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/generic/edit.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load i18n %} +{% load i18n wagtailadmin_tags %} {% block titletag %}{{ view.page_title }} {{ view.get_page_subtitle }}{% endblock %} @@ -8,7 +8,7 @@ {% include "wagtailadmin/shared/header.html" with title=view.page_title subtitle=view.get_page_subtitle icon=view.header_icon %}
- + {% csrf_token %} {% block hidden_fields %} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html index a1c0e0f2cb..9fd9687ed1 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html @@ -17,7 +17,7 @@
- + {% csrf_token %} {{ edit_handler.render_form_content }} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html index 602912805e..ceccf72ab9 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html @@ -24,7 +24,7 @@ - + {% csrf_token %} {{ edit_handler.render_form_content }} diff --git a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py index 180ea3c671..41677d9c45 100644 --- a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py +++ b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py @@ -312,3 +312,17 @@ def message_tags(message): return level_tag else: return '' + + +@register.simple_tag +def novalidate_on_django_1_10(): + """ + Django 1.10 has a bug that breaks client-side validation on forms that include + prefilled file upload fields. This is due to be fixed in Django 1.10.1; as a + workaround, we apply this tag to disable client-side validation (using the + 'novalidate' attribute) on all forms with enctype="multipart/form-data". + """ + if django.VERSION >= (1, 10, 0) and django.VERSION < (1, 10, 1): + return 'novalidate' + else: + return '' diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/chooser/chooser.html b/wagtail/wagtaildocs/templates/wagtaildocs/chooser/chooser.html index 155a00ae17..16fe22e9bc 100644 --- a/wagtail/wagtaildocs/templates/wagtaildocs/chooser/chooser.html +++ b/wagtail/wagtaildocs/templates/wagtaildocs/chooser/chooser.html @@ -1,4 +1,4 @@ -{% load i18n %} +{% load i18n wagtailadmin_tags %} {% trans "Choose a document" as choose_str %} {% include "wagtailadmin/shared/header.html" with title=choose_str tabbed=1 merged=1 icon="doc-full-inverse" %} @@ -28,7 +28,7 @@ {% if uploadform %}
- + {% csrf_token %}
    {% for field in uploadform %} diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/documents/add.html b/wagtail/wagtaildocs/templates/wagtaildocs/documents/add.html index 2e035f1640..e43becd644 100644 --- a/wagtail/wagtaildocs/templates/wagtaildocs/documents/add.html +++ b/wagtail/wagtaildocs/templates/wagtaildocs/documents/add.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load i18n %} +{% load i18n wagtailadmin_tags %} {% load wagtailimages_tags %} {% block titletag %}{% trans "Add a document" %}{% endblock %} @@ -21,7 +21,7 @@ {% include "wagtailadmin/shared/header.html" with title=add_str icon="doc-full-inverse" %}
    - + {% csrf_token %}
      {% for field in form %} diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html b/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html index 453213d35b..09e2dbb27b 100644 --- a/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html +++ b/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load i18n %} +{% load i18n wagtailadmin_tags %} {% load wagtailimages_tags %} {% block titletag %}{% blocktrans with title=document.title %}Editing {{ title }}{% endblocktrans %}{% endblock %} @@ -23,7 +23,7 @@
      - + {% csrf_token %}
        {% for field in form %} diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/multiple/add.html b/wagtail/wagtaildocs/templates/wagtaildocs/multiple/add.html index 5d0723452b..e1ac98bab3 100644 --- a/wagtail/wagtaildocs/templates/wagtaildocs/multiple/add.html +++ b/wagtail/wagtaildocs/templates/wagtaildocs/multiple/add.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load i18n staticfiles %} +{% load i18n staticfiles wagtailadmin_tags %} {% block titletag %}{% trans "Add multiple documents" %}{% endblock %} {% block extra_css %} {{ block.super }} @@ -16,7 +16,7 @@

        {% trans "Drag and drop documents into this area to upload immediately." %}

        {{ help_text }} - +

        diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/multiple/edit_form.html b/wagtail/wagtaildocs/templates/wagtaildocs/multiple/edit_form.html index 6beef9102a..19b2a0da03 100644 --- a/wagtail/wagtaildocs/templates/wagtaildocs/multiple/edit_form.html +++ b/wagtail/wagtaildocs/templates/wagtaildocs/multiple/edit_form.html @@ -1,6 +1,6 @@ -{% load i18n %} +{% load i18n wagtailadmin_tags %} - +
          {% csrf_token %} {% for field in form %} diff --git a/wagtail/wagtailimages/templates/wagtailimages/chooser/chooser.html b/wagtail/wagtailimages/templates/wagtailimages/chooser/chooser.html index 315f33b8b6..202dbbd16d 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/chooser/chooser.html +++ b/wagtail/wagtailimages/templates/wagtailimages/chooser/chooser.html @@ -1,4 +1,4 @@ -{% load wagtailimages_tags %} +{% load wagtailimages_tags wagtailadmin_tags %} {% load i18n %} {% trans "Choose an image" as choose_str %} {% include "wagtailadmin/shared/header.html" with title=choose_str merged=1 tabbed=1 icon="image" %} @@ -36,7 +36,7 @@
{% if uploadform %}
- + {% csrf_token %}
    {% for field in uploadform %} diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/add.html b/wagtail/wagtailimages/templates/wagtailimages/images/add.html index 30b870a0bf..22948a6a3f 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/images/add.html +++ b/wagtail/wagtailimages/templates/wagtailimages/images/add.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load wagtailimages_tags %} +{% load wagtailimages_tags wagtailadmin_tags %} {% load i18n %} {% block titletag %}{% trans "Add an image" %}{% endblock %} @@ -21,7 +21,7 @@ {% include "wagtailadmin/shared/header.html" with title=add_str icon="image" %}
    - + {% csrf_token %}
      {% for field in form %} diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html index 18e1997bfe..4e2569b043 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html +++ b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load wagtailimages_tags staticfiles i18n %} +{% load wagtailimages_tags wagtailadmin_tags staticfiles i18n %} {% block titletag %}{% blocktrans with title=image.title %}Editing image {{ title }}{% endblocktrans %}{% endblock %} {% block extra_css %} {{ block.super }} @@ -34,7 +34,7 @@
      - + {% csrf_token %}
        {% for field in form %} diff --git a/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html b/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html index 99cc5a8c52..47ae3c3413 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html +++ b/wagtail/wagtailimages/templates/wagtailimages/multiple/add.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load wagtailimages_tags i18n staticfiles %} +{% load wagtailimages_tags wagtailadmin_tags i18n staticfiles %} {% block titletag %}{% trans "Add multiple images" %}{% endblock %} {% block extra_css %} {{ block.super }} @@ -16,7 +16,7 @@

        {% trans "Drag and drop images into this area to upload immediately." %}

        {{ help_text }} - +

        diff --git a/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html b/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html index dbb9eb4aa8..e77f1a42e5 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html +++ b/wagtail/wagtailimages/templates/wagtailimages/multiple/edit_form.html @@ -1,6 +1,6 @@ -{% load i18n %} +{% load i18n wagtailadmin_tags %} - +
          {% csrf_token %} {% for field in form %} diff --git a/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/create.html b/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/create.html index 32487d5505..40a606ca47 100644 --- a/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/create.html +++ b/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/create.html @@ -1,11 +1,11 @@ {% extends "wagtailadmin/base.html" %} -{% load i18n %} +{% load i18n wagtailadmin_tags %} {% block titletag %}{% blocktrans with snippet_type_name=model_opts.verbose_name %}New {{ snippet_type_name }}{% endblocktrans %}{% endblock %} {% block content %} {% trans "New" as new_str %} {% include "wagtailadmin/shared/header.html" with title=new_str subtitle=model_opts.verbose_name icon="snippet" tabbed=1 merged=1 %} - + {% csrf_token %} {{ edit_handler.render_form_content }} diff --git a/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/edit.html b/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/edit.html index 311e5b9280..431abbc119 100644 --- a/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/edit.html +++ b/wagtail/wagtailsnippets/templates/wagtailsnippets/snippets/edit.html @@ -1,11 +1,11 @@ {% extends "wagtailadmin/base.html" %} -{% load i18n %} +{% load i18n wagtailadmin_tags %} {% block titletag %}{% blocktrans with snippet_type_name=model_opts.verbose_name %}Editing {{ snippet_type_name }} - {{ instance }}{% endblocktrans %}{% endblock %} {% block content %} {% trans "Editing" as editing_str %} {% include "wagtailadmin/shared/header.html" with title=editing_str subtitle=instance icon="snippet" usage_object=instance tabbed=1 merged=1 %} - + {% csrf_token %} {{ edit_handler.render_form_content }} diff --git a/wagtail/wagtailusers/templates/wagtailusers/users/create.html b/wagtail/wagtailusers/templates/wagtailusers/users/create.html index bbd3f0e252..3efabf2832 100644 --- a/wagtail/wagtailusers/templates/wagtailusers/users/create.html +++ b/wagtail/wagtailusers/templates/wagtailusers/users/create.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load wagtailimages_tags %} +{% load wagtailimages_tags wagtailadmin_tags %} {% load i18n %} {% block titletag %}{% trans "Add user" %}{% endblock %} {% block content %} @@ -12,7 +12,7 @@
        • {% trans "Roles" %}
        - +
        {% csrf_token %}
        diff --git a/wagtail/wagtailusers/templates/wagtailusers/users/edit.html b/wagtail/wagtailusers/templates/wagtailusers/users/edit.html index a2d61673e2..0ef672a95e 100644 --- a/wagtail/wagtailusers/templates/wagtailusers/users/edit.html +++ b/wagtail/wagtailusers/templates/wagtailusers/users/edit.html @@ -1,5 +1,5 @@ {% extends "wagtailadmin/base.html" %} -{% load wagtailimages_tags %} +{% load wagtailimages_tags wagtailadmin_tags %} {% load i18n %} {% block titletag %}{% trans "Editing" %} {{ user.get_username}}{% endblock %} {% block content %} @@ -12,7 +12,7 @@
      • {% trans "Roles" %}
      - +
      {% csrf_token %}