From 3d581c91adf9b47e79080a6882207a2ac4bcb370 Mon Sep 17 00:00:00 2001
From: bgaudino
Date: Thu, 19 Feb 2026 16:44:00 -0600
Subject: [PATCH] Add support for Django 4.2, 5.0, 5.1, 5.2, and 6.0; drop
support for older versions of Django and Python.
---
.github/workflows/ci.yml | 105 ++++++++++++++++-----------------------
CHANGES.rst | 7 ++-
betterforms/__init__.py | 4 +-
betterforms/tests.py | 18 +++----
setup.py | 9 ++--
tox.ini | 30 +++++------
6 files changed, 79 insertions(+), 94 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 3067f6a..fd0e7f6 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -8,72 +8,51 @@ jobs:
fail-fast: false
matrix:
include:
- # Django 1.11
- - django-version: "1.11.0"
- python-version: "3.5"
- - django-version: "1.11.0"
- python-version: "3.6"
- - django-version: "1.11.0"
- python-version: "3.7"
- # Django 2.0
- - django-version: "2.0.0"
- python-version: "3.5"
- - django-version: "2.0.0"
- python-version: "3.6"
- - django-version: "2.0.0"
- python-version: "3.7"
- # Django 2.1
- - django-version: "2.1.0"
- python-version: "3.5"
- - django-version: "2.1.0"
- python-version: "3.6"
- - django-version: "2.1.0"
- python-version: "3.7"
- # Django 2.2
- - django-version: "2.2.0"
- python-version: "3.5"
- - django-version: "2.2.0"
- python-version: "3.6"
- - django-version: "2.2.0"
- python-version: "3.7"
- - django-version: "2.2.0"
+ # Django 4.2
+ - django-version: "4.2"
python-version: "3.8"
- - django-version: "2.2.0"
+ - django-version: "4.2"
python-version: "3.9"
- # Django 3.0
- - django-version: "3.0.0"
- python-version: "3.6"
- - django-version: "3.0.0"
- python-version: "3.7"
- - django-version: "3.0.0"
- python-version: "3.8"
- - django-version: "3.0.0"
- python-version: "3.9"
- # Django 3.1
- - django-version: "3.1.0"
- python-version: "3.6"
- - django-version: "3.1.0"
- python-version: "3.7"
- - django-version: "3.1.0"
- python-version: "3.8"
- - django-version: "3.1.0"
- python-version: "3.9"
- # Django 3.2
- - django-version: "3.2.0"
- python-version: "3.6"
- - django-version: "3.2.0"
- python-version: "3.7"
- - django-version: "3.2.0"
- python-version: "3.8"
- - django-version: "3.2.0"
- python-version: "3.9"
- # Django 4.0
- - django-version: "4.0.0"
- python-version: "3.8"
- - django-version: "4.0.0"
- python-version: "3.9"
- - django-version: "4.0.0"
+ - django-version: "4.2"
+ python-version: "3.10"
+ - django-version: "4.2"
+ python-version: "3.11"
+ - django-version: "4.2"
+ python-version: "3.12"
+ # Django 5.0
+ - django-version: "5.0"
+ python-version: "3.10"
+ - django-version: "5.0"
+ python-version: "3.11"
+ - django-version: "5.0"
+ python-version: "3.12"
+ # Django 5.1
+ - django-version: "5.1"
+ python-version: "3.10"
+ - django-version: "5.1"
+ python-version: "3.11"
+ - django-version: "5.1"
+ python-version: "3.12"
+ - django-version: "5.1"
+ python-version: "3.13"
+ # Django 5.2
+ - django-version: "5.2"
python-version: "3.10"
+ - django-version: "5.2"
+ python-version: "3.11"
+ - django-version: "5.2"
+ python-version: "3.12"
+ - django-version: "5.2"
+ python-version: "3.13"
+ - django-version: "5.2"
+ python-version: "3.14"
+ # Django 6.0
+ - django-version: "6.0"
+ python-version: "3.12"
+ - django-version: "6.0"
+ python-version: "3.13"
+ - django-version: "6.0"
+ python-version: "3.14"
steps:
- uses: actions/checkout@v3
diff --git a/CHANGES.rst b/CHANGES.rst
index 0713556..b2f489e 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -1,7 +1,10 @@
-2.0.1 (unreleased)
+3.0.0 (unreleased)
------------------
-- Nothing changed yet.
+- Dropped support for Python 3.5, 3.6, and 3.7.
+- Dropped support for Django 1.11, 2.0, 2.1, 2.2, 3.0, 3.1, 3.2, and 4.0.
+- Added support for Django 4.2, 5.0, 5.1, 5.2, and 6.0.
+- Added support for Python 3.11, 3.12, 3.13, and 3.14.
2.0.0 (2022-08-11)
diff --git a/betterforms/__init__.py b/betterforms/__init__.py
index 107b59f..1069a0a 100644
--- a/betterforms/__init__.py
+++ b/betterforms/__init__.py
@@ -1 +1,3 @@
-__version__ = __import__('pkg_resources').get_distribution('django-betterforms').version
+from importlib.metadata import version
+
+__version__ = version('django-betterforms')
diff --git a/betterforms/tests.py b/betterforms/tests.py
index 70c417f..0eb44b3 100644
--- a/betterforms/tests.py
+++ b/betterforms/tests.py
@@ -367,8 +367,8 @@ class TestForm(BetterForm):
test = """
@@ -378,7 +378,7 @@ class TestForm(BetterForm):
- """
+ """.format(field_a=form['a'], errors_a=form['a'].errors)
self.assertHTMLEqual(
render_to_string('betterforms/form_as_fieldsets.html', env),
@@ -421,8 +421,8 @@ def test_include_tag_rendering(self):
- """
+ """.format(field_a=form['a'], errors_a=form['a'].errors)
self.assertHTMLEqual(
render_to_string('betterforms/form_as_fieldsets.html', env),
@@ -516,9 +516,9 @@ def test_form_as_p(self):
test = """
@@ -531,7 +531,7 @@ def test_form_as_p(self):
- """
+ """.format(field_a=form['a'], errors_a=form['a'].errors)
self.maxDiff=None
self.assertHTMLEqual(
diff --git a/setup.py b/setup.py
index e9ed8cf..47b966c 100644
--- a/setup.py
+++ b/setup.py
@@ -21,7 +21,7 @@ def read(fname):
author_email='programmers@fusionbox.com',
packages=[package for package in find_packages()
if package.startswith('betterforms')],
- install_requires=['Django>=1.11'],
+ install_requires=['Django>=4.2'],
zip_safe=False,
include_package_data=True,
classifiers=[
@@ -31,12 +31,13 @@ def read(fname):
'License :: OSI Approved :: BSD License',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.5',
- 'Programming Language :: Python :: 3.6',
- 'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
+ 'Programming Language :: Python :: 3.11',
+ 'Programming Language :: Python :: 3.12',
+ 'Programming Language :: Python :: 3.13',
+ 'Programming Language :: Python :: 3.14',
'Topic :: Internet :: WWW/HTTP',
],
)
diff --git a/tox.ini b/tox.ini
index cd92134..040b03b 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,28 +1,28 @@
[tox]
envlist =
- py{35,36,37}-dj{111,20,21}
- py{35,36,37,38,39}-dj22
- py{36,37,38,39}-dj{30,31,32}
- py{38,39,310}-dj40
+ py{38,39,310,311,312}-dj42
+ py{310,311,312}-dj50
+ py{310,311,312,313}-dj51
+ py{310,311,312,313,314}-dj52
+ py{312,313,314}-dj60
+
[testenv]
python =
- py35: python3.5
- py36: python3.6
- py37: python3.7
py38: python3.8
py39: python3.9
py310: python3.10
+ py311: python3.11
+ py312: python3.12
+ py313: python3.13
+ py314: python3.14
commands = make {posargs:test}
deps =
-r tests/requirements.txt
- dj111: Django>=1.11,<1.12
- dj20: Django>=2.0,<2.1
- dj21: Django>=2.1,<2.2
- dj22: Django>=2.2,<2.3
- dj30: Django>=3.0,<3.1
- dj31: Django>=3.1,<3.2
- dj32: Django>=3.2,<3.3
- dj40: Django>=4.0,<4.1
+ dj42: Django>=4.2,<4.3
+ dj50: Django>=5.0,<5.1
+ dj51: Django>=5.1,<5.2
+ dj52: Django>=5.2,<5.3
+ dj60: Django>=6.0,<6.1
whitelist_externals = make