From 08f788b169a30d26f50433083aca253a4e4031b2 Mon Sep 17 00:00:00 2001
From: Benjamin Bach <benjamin@overtag.dk>
Date: Sun, 1 Apr 2018 12:06:56 +0200
Subject: [PATCH] Fixed #29226 -- Doc'd modify_settings() ordering
 considerations for Python < 3.6.

---
 docs/topics/testing/tools.txt | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/docs/topics/testing/tools.txt b/docs/topics/testing/tools.txt
index 8354771685..92e96e8c98 100644
--- a/docs/topics/testing/tools.txt
+++ b/docs/topics/testing/tools.txt
@@ -1277,6 +1277,23 @@ The decorator can also be applied to test case classes::
     decorator. For a given class, :func:`~django.test.modify_settings` is
     always applied after :func:`~django.test.override_settings`.
 
+.. admonition:: Considerations with Python 3.5
+
+    If using Python 3.5 (or older, if using an older version of Django), avoid
+    mixing  ``remove`` with ``append`` and ``prepend`` in
+    :func:`~django.test.modify_settings`. In some cases it matters whether a
+    value is first added and then removed or vice versa, and dictionary key
+    order isn't preserved until Python 3.6. Instead, apply the decorator twice
+    to guarantee the order of operations. For example, to ensure that
+    ``SessionMiddleware`` appears first in ``MIDDLEWARE``::
+
+        @modify_settings(MIDDLEWARE={
+            'remove': ['django.contrib.sessions.middleware.SessionMiddleware'],
+        )
+        @modify_settings(MIDDLEWARE={
+            'prepend': ['django.contrib.sessions.middleware.SessionMiddleware'],
+        })
+
 .. warning::
 
     The settings file contains some settings that are only consulted during