diff --git a/meta-python/recipes-devtools/python/python3-django/0001-Fix-tag_strip-tests.patch b/meta-python/recipes-devtools/python/python3-django/0001-Fix-tag_strip-tests.patch
new file mode 100644
index 0000000000..be5d11e0ba
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-django/0001-Fix-tag_strip-tests.patch
@@ -0,0 +1,37 @@
+From bd3ffbbacceef7fabd3135ca90eba1397e2b5901 Mon Sep 17 00:00:00 2001
+From: Your Name
+Date: Tue, 13 Jan 2026 20:07:35 +0000
+Subject: [PATCH] Fix tag_strip tests
+
+Python's htmlparser behavior changed between python versions, and
+the tests expect incorrect result due to this.
+
+This patch is a partial backport, to use only the results that are
+valid for the OE Python version.
+
+Upstream-Status: Backport [https://github.com/django/django/commit/2980627502c84a9fd09272e1349dc574a2ff1fb1]
+Signed-off-by: Gyorgy Sarvari
+---
+ tests/utils_tests/test_html.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tests/utils_tests/test_html.py b/tests/utils_tests/test_html.py
+index 86f5562..71757ad 100644
+--- a/tests/utils_tests/test_html.py
++++ b/tests/utils_tests/test_html.py
+@@ -89,10 +89,10 @@ class TestUtilsHtml(SimpleTestCase):
+ ('&gotcha<>', '&gotcha<>'),
+ ('ript>test</script>', 'ript>test'),
+ ('&h', 'alert()h'),
+- ('>'),
+ ('X<<<
br>br>br>X', 'XX'),
+ ("<" * 50 + "a>" * 50, ""),
+- (">" + "" + "" + ""),
+ ("
+Date: Thu, 9 Dec 2021 20:24:38 +0100
+Subject: [PATCH] Fixed inspectdb.tests.InspectDBTestCase.test_custom_fields()
+ on SQLite 3.37+.
+
+From: Mariusz Felisiak
+
+Use FlexibleFieldLookupDict which is case-insensitive mapping because
+SQLite 3.37+ returns some data type names upper-cased e.g. TEXT.
+
+Upstream-Status: Backport [https://github.com/django/django/commit/974e3b8750fe96c16c9c0b115a72ee4a2171df34]
+Signed-off-by: Gyorgy Sarvari
+---
+ tests/inspectdb/tests.py | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/tests/inspectdb/tests.py b/tests/inspectdb/tests.py
+index bb5e457..a2519cf 100644
+--- a/tests/inspectdb/tests.py
++++ b/tests/inspectdb/tests.py
+@@ -256,18 +256,17 @@ class InspectDBTestCase(TestCase):
+ Introspection of columns with a custom field (#21090)
+ """
+ out = StringIO()
+- orig_data_types_reverse = connection.introspection.data_types_reverse
+- try:
+- connection.introspection.data_types_reverse = {
++ with mock.patch(
++ 'django.db.connection.introspection.data_types_reverse.base_data_types_reverse',
++ {
+ 'text': 'myfields.TextField',
+ 'bigint': 'BigIntegerField',
+- }
++ },
++ ):
+ call_command('inspectdb', 'inspectdb_columntypes', stdout=out)
+ output = out.getvalue()
+ self.assertIn("text_field = myfields.TextField()", output)
+ self.assertIn("big_int_field = models.BigIntegerField()", output)
+- finally:
+- connection.introspection.data_types_reverse = orig_data_types_reverse
+
+ def test_introspection_errors(self):
+ """
diff --git a/meta-python/recipes-devtools/python/python3-django/0001-Fixed-test_utils.tests.HTMLEqualTests.test_parsing_e.patch b/meta-python/recipes-devtools/python/python3-django/0001-Fixed-test_utils.tests.HTMLEqualTests.test_parsing_e.patch
new file mode 100644
index 0000000000..a84a118bcb
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-django/0001-Fixed-test_utils.tests.HTMLEqualTests.test_parsing_e.patch
@@ -0,0 +1,32 @@
+From 744927154e6748db08f5232de78ee0d4a8be61a5 Mon Sep 17 00:00:00 2001
+From: Gyorgy Sarvari
+Date: Mon, 21 Jul 2025 15:23:32 -0300
+Subject: [PATCH] Fixed test_utils.tests.HTMLEqualTests.test_parsing_errors
+ following Python's HTMLParser fixed parsing.
+
+From: Natalia <124304+nessita@users.noreply.github.com>
+
+Further details about Python changes can be found in:
+https://github.com/python/cpython/commit/0243f97cbadec8d985e63b1daec5d1cbc850cae3.
+
+Thank you Clifford Gama for the thorough review!
+
+Upstream-Status: Backport [https://github.com/django/django/commit/e4515dad7a6d953c0bd2414127ba36e1446ff41a]
+Signed-off-by: Gyorgy Sarvari
+---
+ tests/test_utils/tests.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/test_utils/tests.py b/tests/test_utils/tests.py
+index a1a113a..d1a1e35 100644
+--- a/tests/test_utils/tests.py
++++ b/tests/test_utils/tests.py
+@@ -736,7 +736,7 @@ class HTMLEqualTests(SimpleTestCase):
+ "('Unexpected end tag `div` (Line 1, Column 6)', (1, 6))"
+ )
+ with self.assertRaisesMessage(AssertionError, error_msg):
+- self.assertHTMLEqual('< div> div>', '')
++ self.assertHTMLEqual('< div>', '')
+ with self.assertRaises(HTMLParseError):
+ parse_html('
')
+
diff --git a/meta-python/recipes-devtools/python/python3-django/0001-Made-RemoteTestResultTest.test_pickle_errors_detecti.patch b/meta-python/recipes-devtools/python/python3-django/0001-Made-RemoteTestResultTest.test_pickle_errors_detecti.patch
new file mode 100644
index 0000000000..f515494254
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-django/0001-Made-RemoteTestResultTest.test_pickle_errors_detecti.patch
@@ -0,0 +1,59 @@
+From 80d06be0a5dc82d8cf8dd8105b6734c188743fae Mon Sep 17 00:00:00 2001
+From: Gyorgy Sarvari
+Date: Tue, 21 Oct 2025 21:11:44 +0200
+Subject: [PATCH] Made RemoteTestResultTest.test_pickle_errors_detection()
+ compatible with tblib 3.2+.
+
+From: Mariusz Felisiak
+
+tblib 3.2+ makes exception subclasses with __init__() and the default
+__reduce__() picklable. This broke the test for
+RemoteTestResult._confirm_picklable(), which expects a specific
+exception to fail unpickling.
+
+https://github.com/ionelmc/python-tblib/blob/master/CHANGELOG.rst#320-2025-10-21
+
+This fix defines ExceptionThatFailsUnpickling.__reduce__() in a way
+that pickle.dumps(obj) succeeds, but pickle.loads(pickle.dumps(obj))
+raises TypeError.
+
+Refs #27301. This preserves the intent of the regression test from
+52188a5ca6bafea0a66f17baacb315d61c7b99cd without skipping it.
+
+Upstream-Status: Backport [https://github.com/django/django/commit/548209e620b3ca34396a360453f07c8dbb8aa6c7]
+Signed-off-by: Gyorgy Sarvari
+---
+ tests/test_runner/test_parallel.py | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/tests/test_runner/test_parallel.py b/tests/test_runner/test_parallel.py
+index c1a89bd..7c72216 100644
+--- a/tests/test_runner/test_parallel.py
++++ b/tests/test_runner/test_parallel.py
+@@ -1,3 +1,4 @@
++import pickle
+ import unittest
+
+ from django.test import SimpleTestCase
+@@ -18,6 +19,12 @@ class ExceptionThatFailsUnpickling(Exception):
+ def __init__(self, arg):
+ super().__init__()
+
++ def __reduce__(self):
++ # tblib 3.2+ makes exception subclasses picklable by default.
++ # Return (cls, ()) so the constructor fails on unpickle, preserving
++ # the needed behavior for test_pickle_errors_detection.
++ return (self.__class__, ())
++
+
+ class ParallelTestRunnerTest(SimpleTestCase):
+ """
+@@ -59,6 +66,8 @@ class RemoteTestResultTest(SimpleTestCase):
+ result = RemoteTestResult()
+ result._confirm_picklable(picklable_error)
+
++ # The exception can be pickled but not unpickled.
++ pickle.dumps(not_unpicklable_error)
+ msg = '__init__() missing 1 required positional argument'
+ with self.assertRaisesMessage(TypeError, msg):
+ result._confirm_picklable(not_unpicklable_error)
diff --git a/meta-python/recipes-devtools/python/python3-django/0001-fix-quote-type-in-expected-error-message.patch b/meta-python/recipes-devtools/python/python3-django/0001-fix-quote-type-in-expected-error-message.patch
new file mode 100644
index 0000000000..617d63aa35
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-django/0001-fix-quote-type-in-expected-error-message.patch
@@ -0,0 +1,31 @@
+From 5cae184e0d57dacae25439e533c4e1ef6f6c4cae Mon Sep 17 00:00:00 2001
+From: Gyorgy Sarvari
+Date: Tue, 13 Jan 2026 23:31:06 +0100
+Subject: [PATCH] fix quote type in expected error message
+
+Instead of double quotes the error is returned with single quotes.
+This is localization dependent, comes from a po file - some locales use
+single quotes, other are translated with double quotes. The default
+locale used with the OE ptest image uses single quotes - adapt the test
+to this.
+
+Upstream-Status: Inappropriate [This is not a nice solution. Hardcoding single quotes is not better than the original]
+
+Signed-off-by: Gyorgy Sarvari
+---
+ tests/forms_tests/field_tests/test_filefield.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/forms_tests/field_tests/test_filefield.py b/tests/forms_tests/field_tests/test_filefield.py
+index ba559ee..3880e11 100644
+--- a/tests/forms_tests/field_tests/test_filefield.py
++++ b/tests/forms_tests/field_tests/test_filefield.py
+@@ -144,7 +144,7 @@ class MultipleFileFieldTest(SimpleTestCase):
+ evil_files[i:] + evil_files[:i] # Rotate by i.
+ for i in range(len(evil_files))
+ )
+- msg = "File extension “sh” is not allowed. Allowed extensions are: "
++ msg = "File extension 'sh' is not allowed. Allowed extensions are: "
+ for rotated_evil_files in evil_rotations:
+ with self.assertRaisesMessage(ValidationError, msg):
+ f.clean(rotated_evil_files)
diff --git a/meta-python/recipes-devtools/python/python3-django_2.2.28.bb b/meta-python/recipes-devtools/python/python3-django_2.2.28.bb
index 0f6f8fc4d0..dedb2498cb 100644
--- a/meta-python/recipes-devtools/python/python3-django_2.2.28.bb
+++ b/meta-python/recipes-devtools/python/python3-django_2.2.28.bb
@@ -39,6 +39,11 @@ SRC_URI += "file://CVE-2023-31047.patch \
file://0001-fix-ipv6-test.patch \
file://0001-Fixed-32298-Fixed-URLValidator-hostname-length-valid.patch \
file://0001-Fixed-33367-Fixed-URLValidator-crash-in-some-edge-ca.patch \
+ file://0001-Fix-tag_strip-tests.patch \
+ file://0001-Fixed-inspectdb.tests.InspectDBTestCase.test_custom_.patch \
+ file://0001-Fixed-test_utils.tests.HTMLEqualTests.test_parsing_e.patch \
+ file://0001-Made-RemoteTestResultTest.test_pickle_errors_detecti.patch \
+ file://0001-fix-quote-type-in-expected-error-message.patch \
"
SRC_URI[sha256sum] = "0200b657afbf1bc08003845ddda053c7641b9b24951e52acd51f6abda33a7413"