diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index fa9f290..d085462 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
steps:
- uses: actions/checkout@v1
diff --git a/HISTORY.rst b/HISTORY.rst
index 0744ec6..4ff9aaf 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -3,6 +3,13 @@
History
=======
+2.6.0
+-----
+
+* Drop Python 3.9 support
+* Add Python 3.14 support
+* Add Django 6.0 support
+
2.5.0
-----
diff --git a/README.rst b/README.rst
index 5a397d5..a987665 100644
--- a/README.rst
+++ b/README.rst
@@ -88,9 +88,9 @@ Targets & testing
The codebase is targeted and tested against:
-* Django 3.2.x against Python 3.8, 3.9, 3.10
-* Django 4.2.x against Python 3.8, 3.9, 3.10, 3.11, 3.12
-* Django 5.2.x against Python 3.10, 3.11, 3.12, 3.13
+* Django 4.2.x against Python 3.10, 3.11, 3.12
+* Django 5.2.x against Python 3.10, 3.11, 3.12, 3.13, 3.14
+* Django 6.0.x against Python 3.12, 3.13, 3.14
To run the tests against all target environments, install `tox
`_ and then execute the command::
@@ -146,6 +146,12 @@ By default you will need to install `django-extensions` or comparable libraries
if you plan on adding Django Organizations as an installed app to your Django
project. See below on configuring.
+Upgrading
+---------
+
+Upgrading django-organizations is expected to be a low-impact operation. See the Upgrading
+section in the Getting Started docs for additional considerations.
+
Configuring
-----------
@@ -268,14 +274,3 @@ License
Anyone is free to use or modify this software under the terms of the BSD
license.
-
-Sponsors
-========
-
-`Muster `_ is building precision advocacy software to impact policy through grassroots action.
-
-.. image:: https://www.muster.com/hs-fs/hubfs/muster_logo-2.png?width=600&name=muster_logo-2.png
- :target: https://www.muster.com/home?utm_source=github&campaign=opensource
- :width: 400
- :alt: Alternative text
-
diff --git a/conftest.py b/conftest.py
index 21be2a6..e32eb16 100644
--- a/conftest.py
+++ b/conftest.py
@@ -16,6 +16,7 @@ def pytest_configure():
DATABASES={
"default": {"ENGINE": "django.db.backends.sqlite3", "NAME": "test.sqlite3"}
},
+ DEFAULT_AUTO_FIELD="django.db.models.AutoField",
INSTALLED_APPS=[
"django.contrib.auth",
"django.contrib.contenttypes",
diff --git a/docs/getting_started.rst b/docs/getting_started.rst
index b438037..f930d34 100644
--- a/docs/getting_started.rst
+++ b/docs/getting_started.rst
@@ -97,6 +97,21 @@ consistent**, including keyword arguments. Otherwise you will end up generating
extraneous and possibly conflicting migrations in your own app. The SlugField
must accept the `populate_from` keyword argument.
+Upgrading
+=========
+
+Updating Django from a pre-6.0 version to 6.0 or above may result in creating
+new migrations for custom organization models if you do not already have
+`DEFAULT_AUTO_FIELD` set in your project. This is because in Django 6.0 the
+default field changed from `AutoField` (with an `IntegerField` under the hood)
+to a `BigAutoField` (with a `BigIntegerField` under the hood).
+
+This applies to your project and your project migrations, however, so
+you are free to treat this however you want, e.g. if you want to keep `IntegerFields`
+as the field type, configure your project settings as much or separate the `database
+and state operations `_
+in the migration (maybe not ideal but safe with regard to your database).
+
Users and multi-account membership
==================================
diff --git a/pyproject.toml b/pyproject.toml
index c22c933..c0ed58e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -5,7 +5,7 @@ authors = [
]
description = "Group accounts for Django"
readme = "README.rst"
-requires-python = ">=3.9"
+requires-python = ">=3.10"
license = {text = "BSD License"}
classifiers = [
"Development Status :: 5 - Production/Stable",
@@ -15,15 +15,15 @@ classifiers = [
"License :: OSI Approved :: BSD License",
"Operating System :: OS Independent",
"Programming Language :: Python",
- "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",
"Programming Language :: Python :: Implementation :: CPython",
]
dependencies = [
- "Django>=3.2",
+ "Django>=4.2",
"django-extensions>=2.0.8",
]
dynamic = ["version"]
diff --git a/setup.cfg b/setup.cfg
index 0a5719d..f4ab3f1 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -16,10 +16,11 @@ classifiers =
License :: OSI Approved :: BSD License
Operating System :: OS Independent
Programming Language :: Python
- 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
Programming Language :: Python :: Implementation :: CPython
Development Status :: 5 - Production/Stable
@@ -30,7 +31,7 @@ packages = find:
package_dir=
=src
install_requires =
- Django>=3.2.0
+ Django>=4.2.0
django-extensions>=2.0.8
python_requires = >=3.8
diff --git a/src/organizations/__init__.py b/src/organizations/__init__.py
index 24304d2..242d6df 100644
--- a/src/organizations/__init__.py
+++ b/src/organizations/__init__.py
@@ -2,4 +2,4 @@
__author__ = "Ben Lopatin"
__email__ = "ben@benlopatin.com"
-__version__ = "2.5.0"
+__version__ = "2.6.0"
diff --git a/tox.ini b/tox.ini
index b4f8c91..9632302 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,18 +1,18 @@
[tox]
envlist =
flake8,
- py{39,310}-django{32},
- py{39}-django{42},
+ py{310}-django{32}
py{310,311,312}-django{42}
- py{310,311,312,313}-django{52}
+ py{310,311,312,313,314}-django{52}
+ py{312,313,314}-django{60}
[gh-actions]
python =
- 3.9: py39
3.10: py310
3.11: py311
3.12: py312
3.13: py313
+ 3.14: py314
[build-system]
build-backend = "hatchling.build"
@@ -24,22 +24,22 @@ setenv =
PYTHONPATH = {toxinidir}:{toxinidir}/organizations
commands = pytest {posargs} --cov=organizations
basepython =
- py39: python3.9
py310: python3.10
py311: python3.11
py312: python3.12
py313: python3.13
+ py314: python3.14
deps =
hatch>=1.7.0
- django32: Django>=3.2,<4
- django42: Django>=4.2,<5
- django52: Django>=5.2,<6
+ django42: Django>=4.2.8,<5 # Django 4.2.8 is required for Python 3.12 support
+ django52: Django>=5.2.8,<6 # Django 5.2.8 is required for Python 3.14 support
+ django60: Django>=6.0,<6.1
extras = tests
[testenv:flake8]
basepython=python3
deps=
- flake8==3.12.7
+ flake8==7.3.0
commands=
flake8 src/organizations tests