diff --git a/dev-python/django-environ/Manifest b/dev-python/django-environ/Manifest
new file mode 100644
index 000000000..253787639
--- /dev/null
+++ b/dev-python/django-environ/Manifest
@@ -0,0 +1 @@
+DIST django_environ-0.12.0.tar.gz 56804 BLAKE2B 98dccf8ff9bb20b3019dff84a42a6d7bffe0cd0c73b6445dbcfca87c1a39a9ca144fa315c7620787d667c5986be95e6eb45bd37e3f41fc9c41d6d325762ec863 SHA512 73a9691b4bc221ae887f7917cfcc18bd5db546a1e2d463f56ae0f7db2b46ea369697f0c0eda911ca977c861274928d4bdcff3936a768a9279ab2bd18e4e403dc
diff --git a/dev-python/django-environ/django-environ-0.12.0.ebuild b/dev-python/django-environ/django-environ-0.12.0.ebuild
new file mode 100644
index 000000000..f08773101
--- /dev/null
+++ b/dev-python/django-environ/django-environ-0.12.0.ebuild
@@ -0,0 +1,31 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{11..13} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Library to utilize 12factor inspired environment variables to configure Django."
+HOMEPAGE="
+ https://github.com/joke2k/django-environ/
+ https://pypi.org/project/django-environ/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+
+RDEPEND="
+ >=dev-python/django-2.2[${PYTHON_USEDEP}]
+"
+
+# one failing test
+EPYTEST_DESELECT=(
+ 'tests/test_db.py::test_db_parsing[postgres_cluster]'
+)
+
+distutils_enable_sphinx docs dev-python/furo dev-python/sphinx-notfound-page
+distutils_enable_tests pytest
diff --git a/dev-python/django-post_office-haiwen/metadata.xml b/dev-python/django-environ/metadata.xml
similarity index 54%
rename from dev-python/django-post_office-haiwen/metadata.xml
rename to dev-python/django-environ/metadata.xml
index ace7c2d3a..0d414e33f 100644
--- a/dev-python/django-post_office-haiwen/metadata.xml
+++ b/dev-python/django-environ/metadata.xml
@@ -1,8 +1,12 @@
-
+
unknown@pentoo.ch
Author Unknown
+
+ joke2k/django-environ
+ django-environ
+
diff --git a/dev-python/django-formtools/Manifest b/dev-python/django-formtools/Manifest
index 181605898..9ccb32c3a 100644
--- a/dev-python/django-formtools/Manifest
+++ b/dev-python/django-formtools/Manifest
@@ -1 +1 @@
-DIST django-formtools-2.1.tar.gz 70182 BLAKE2B 955278ba70b469b84e4d94983729ac7669c90cc23fcc2806abac92b2e0ef59870f8466879e2e378fe6699a17374769abc1835e331e675b5ad5dc2e90f9f1f5c2 SHA512 b3a89b0e7dfbfd1ae1ec92bb100fb8d332a4bdfb00e2b25a306dea3863b95e18372919823a9bb4945b367011fd31e89be52b08a916b797ecc508809815622b9e
+DIST django-formtools-2.5.1.gh.tar.gz 80928 BLAKE2B 4f03016a506ea8a9cb8b1e845fae0b384e3857e275007646477dda97c9cb784ef7bae28339f54b744a61926414721c58ccd60afb70eb06802df55f329860350e SHA512 2b6e4061f2e01b074d8ce92fab3579bf844666e85be36ce6a6522c526a96d695f2939267278af10a167e46e61d6f6301acab832b1d50cdd5ec75ff7c3081966b
diff --git a/dev-python/django-formtools/django-formtools-2.5.1.ebuild b/dev-python/django-formtools/django-formtools-2.5.1.ebuild
new file mode 100644
index 000000000..a494744a0
--- /dev/null
+++ b/dev-python/django-formtools/django-formtools-2.5.1.ebuild
@@ -0,0 +1,26 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{11..13} )
+
+inherit distutils-r1
+
+DESCRIPTION="A set of high-level abstractions for Django forms"
+HOMEPAGE="https://django-formtools.readthedocs.io/en/latest/ https://django-filter.readthedocs.org"
+SRC_URI="https://github.com/jazzband/${PN}/archive/refs/tags/${PV}.tar.gz -> ${P}.gh.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+RESTRICT="test" # it's using tox
+
+RDEPEND=">=dev-python/django-3.2[${PYTHON_USEDEP}]"
+
+PATCHES=(
+ "${FILESDIR}/${P}-fix-pyproject.patch"
+)
+
+distutils_enable_sphinx docs
diff --git a/dev-python/django-formtools/django-formtools-2.1.ebuild b/dev-python/django-formtools/django-formtools-9999.ebuild
similarity index 56%
rename from dev-python/django-formtools/django-formtools-2.1.ebuild
rename to dev-python/django-formtools/django-formtools-9999.ebuild
index e18c2ba27..cf81bb634 100644
--- a/dev-python/django-formtools/django-formtools-2.1.ebuild
+++ b/dev-python/django-formtools/django-formtools-9999.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -6,16 +6,17 @@ EAPI=8
DISTUTILS_USE_PEP517=setuptools
PYTHON_COMPAT=( python3_{11..13} )
-inherit distutils-r1
+inherit distutils-r1 git-r3
DESCRIPTION="A set of high-level abstractions for Django forms"
HOMEPAGE="https://django-formtools.readthedocs.io/en/latest/ https://django-filter.readthedocs.org"
-SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+EGIT_REPO_URI="https://github.com/jazzband/${PN}.git"
LICENSE="BSD"
SLOT="0"
-KEYWORDS="~amd64 ~x86"
+KEYWORDS=""
+RESTRICT="test" # it's using tox
-CDEPEND=">=dev-python/django-1.11[${PYTHON_USEDEP}]"
-RDEPEND="${CDEPEND}"
-DEPEND="dev-python/setuptools[${PYTHON_USEDEP}]"
+RDEPEND=">=dev-python/django-4.2[${PYTHON_USEDEP}]"
+
+distutils_enable_sphinx docs
diff --git a/dev-python/django-formtools/files/django-formtools-2.5.1-fix-pyproject.patch b/dev-python/django-formtools/files/django-formtools-2.5.1-fix-pyproject.patch
new file mode 100644
index 000000000..67bb0ec67
--- /dev/null
+++ b/dev-python/django-formtools/files/django-formtools-2.5.1-fix-pyproject.patch
@@ -0,0 +1,37 @@
+Patch pyproject for tarball and not dynamic version
+Fix by rick
+
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -2,7 +2,6 @@
+ build-backend = "setuptools.build_meta"
+ requires = [
+ "setuptools>=61.2",
+- "setuptools_scm",
+ ]
+
+ [project]
+@@ -32,9 +31,7 @@ classifiers = [
+ "Programming Language :: Python :: 3.12",
+ "Topic :: Internet :: WWW/HTTP",
+ ]
+-dynamic = [
+- "version",
+-]
++version = "2.5.1"
+ dependencies = [
+ "Django>=3.2",
+ ]
+@@ -53,11 +50,9 @@ license-files = ["LICENSE"]
+ zip-safe = false
+
+ [tool.setuptools.packages.find]
+-exclude = ["tests"] # tests.*
++exclude = ["tests*"] # tests.*
+ namespaces = false
+
+-[tool.setuptools_scm]
+-
+ [tool.codespell]
+ skip = "*.po"
+
diff --git a/dev-python/django-formtools/metadata.xml b/dev-python/django-formtools/metadata.xml
index ace7c2d3a..522253c95 100644
--- a/dev-python/django-formtools/metadata.xml
+++ b/dev-python/django-formtools/metadata.xml
@@ -5,4 +5,8 @@
unknown@pentoo.ch
Author Unknown
+
+ jazzband/django-formtools
+ django-formtools
+
diff --git a/dev-python/django-guardian/Manifest b/dev-python/django-guardian/Manifest
index 24cb0e3a7..5f0ecdc00 100644
--- a/dev-python/django-guardian/Manifest
+++ b/dev-python/django-guardian/Manifest
@@ -1 +1,2 @@
-DIST django-guardian-2.3.0.tar.gz 159296 BLAKE2B 063e910454d62f69d93965b8e7b6c57734ca7f9191afbf99bacbe5488f3ab7e5924cb97131a049d462d7499c087d8d21f9c05c9be020bfb203930cad8c949155 SHA512 84f9825fae21e89fa62209bdb9dcd3078d280a2f6eca5cd3cde470bd416e6a788317dcf127615052b4b840b80a6b770fa5a3348ff9ea23d5c6a5518aa01fbb7d
+DIST django-guardian-2.4.0.tar.gz 159008 BLAKE2B 8eb6ee82ed9eb6098deb8b8c0f1142d3e96f5a2bb5ad5822ddfe8c004a208421e465165fdfec85077ef9b8d03e7222d7d9e132a03e055c0de506b69dfff8f003 SHA512 7e65a27fbb485a047dd02466b7e36daceb4a27b5ff30ec035fa37b7d300e78e43de213606e54d0b1be2e64ae8835a55cef98788ae45ec2446e502fdd312d8ed6
+DIST django-guardian-3.0.1.gh.tar.gz 259978 BLAKE2B b261f7823b41e03eafb33294c6a715886d008fb303270d4acec0543063a283a68042d1de3814b9e7439655eed0da50a8b07c48327fb45711fce50c364196426b SHA512 5f07b5b336a7126bb42e6212681536af608a13b320b372413cf671f7515f81f83b9f793c992e97e51e5008958620232aaa61ceaee03c0ef67ae770e351d6e74d
diff --git a/dev-python/django-guardian/django-guardian-2.3.0.ebuild b/dev-python/django-guardian/django-guardian-2.3.0.ebuild
deleted file mode 100644
index 1162cb981..000000000
--- a/dev-python/django-guardian/django-guardian-2.3.0.ebuild
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 1999-2020 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{11..13} )
-
-inherit distutils-r1
-
-DESCRIPTION="Implementation of per object permissions for Django 1.2+"
-HOMEPAGE="https://github.com/django-guardian/django-guardian"
-SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~amd64 ~x86"
-
-CDEPEND=">=dev-python/django-2.2[${PYTHON_USEDEP}]"
-RDEPEND="${CDEPEND}"
-DEPEND="dev-python/setuptools[${PYTHON_USEDEP}]"
diff --git a/dev-python/django-guardian/django-guardian-2.4.0.ebuild b/dev-python/django-guardian/django-guardian-2.4.0.ebuild
new file mode 100644
index 000000000..0060f5ed4
--- /dev/null
+++ b/dev-python/django-guardian/django-guardian-2.4.0.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{11..13} )
+PYPI_NO_NORMALIZE=1
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Implementation of per object permissions for Django 1.2+"
+HOMEPAGE="https://github.com/django-guardian/django-guardian"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="
+ >=dev-python/django-2.2[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ ${RDEPEND}
+ test? (
+ dev-python/django-environ[${PYTHON_USEDEP}]
+ dev-python/mock[${PYTHON_USEDEP}]
+ dev-python/pytest-django[${PYTHON_USEDEP}]
+ )
+"
+
+distutils_enable_sphinx docs dev-python/sphinx-rtd-theme
+distutils_enable_tests pytest
diff --git a/dev-python/django-guardian/django-guardian-3.0.1.ebuild b/dev-python/django-guardian/django-guardian-3.0.1.ebuild
new file mode 100644
index 000000000..aa402812d
--- /dev/null
+++ b/dev-python/django-guardian/django-guardian-3.0.1.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{11..13} )
+
+inherit distutils-r1
+
+DESCRIPTION="Implementation of per object permissions for Django 1.2+"
+HOMEPAGE="https://github.com/django-guardian/django-guardian"
+SRC_URI="https://github.com/${PN}/${PN}/archive/refs/tags/${PV}.tar.gz -> ${P}.gh.tar.gz"
+
+LICENSE="BSD-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="
+ >=dev-python/django-3.2[${PYTHON_USEDEP}]
+"
+BDEPEND="
+ ${RDEPEND}
+ test? (
+ >=dev-python/django-environ-0.12.0[${PYTHON_USEDEP}]
+ >=dev-python/mock-5.1.0[${PYTHON_USEDEP}]
+ >=dev-python/pytest-django-4.9.0[${PYTHON_USEDEP}]
+ )
+"
+
+# it's using mkdoc, FIXME
+#distutils_enable_sphinx docs dev-python/sphinx-rtd-theme
+distutils_enable_tests pytest
diff --git a/dev-python/django-guardian/metadata.xml b/dev-python/django-guardian/metadata.xml
index db0f199f2..d70463276 100644
--- a/dev-python/django-guardian/metadata.xml
+++ b/dev-python/django-guardian/metadata.xml
@@ -1,12 +1,12 @@
-
- johann@j-schmitz.net
- Johann Schmitz (ercpe)
-
-
- lukaszb/django-guardian
- django-guardian
-
+
+ johann@j-schmitz.net
+ Johann Schmitz (ercpe)
+
+
+ django-guardian/django-guardian
+ django-guardian
+
diff --git a/dev-python/django-post_office-haiwen/Manifest b/dev-python/django-post_office-haiwen/Manifest
deleted file mode 100644
index 1f4ed3247..000000000
--- a/dev-python/django-post_office-haiwen/Manifest
+++ /dev/null
@@ -1 +0,0 @@
-DIST 2312cf240363721f737b5ac8eb86ab8cb255938f.tar.gz 42247 BLAKE2B f47bcab9f6946c4baad51989e9e05e1e9cd7831f6cba2ac762b7b8f8c9296f96c2afb3455ff35df0573417fbc76be7bcbc430a497c357cae836d667b0ba230a2 SHA512 874953b80ec6226db55b710472c9004f254e6cbce359f8379ea9f73236690275ccffb0672891763a635b5c1678f99c5ba7685a44250b1f715a867eb72f7a292f
diff --git a/dev-python/django-post_office-haiwen/django-post_office-haiwen-20180914.ebuild b/dev-python/django-post_office-haiwen/django-post_office-haiwen-20180914.ebuild
deleted file mode 100644
index d3e37a47d..000000000
--- a/dev-python/django-post_office-haiwen/django-post_office-haiwen-20180914.ebuild
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 1999-2020 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{11..13} )
-
-inherit distutils-r1
-
-HASH_COMMIT="2312cf240363721f737b5ac8eb86ab8cb255938f"
-DESCRIPTION="A Django app to monitor and send mail asynchronously"
-HOMEPAGE="https://github.com/ui/django-post_office https://django-filter.readthedocs.org"
-#SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
-SRC_URI="https://github.com/haiwen/django-post_office/archive/${HASH_COMMIT}.tar.gz"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~amd64 ~x86"
-
-CDEPEND=">=dev-python/django-1.8[${PYTHON_USEDEP}]
- dev-python/jsonfield[${PYTHON_USEDEP}]"
-RDEPEND="${CDEPEND}"
-DEPEND="dev-python/setuptools[${PYTHON_USEDEP}]"
-
-S="${WORKDIR}/django-post_office-${HASH_COMMIT}"
diff --git a/profiles/pentoo/base/packages.build b/profiles/pentoo/base/packages.build
index feabc33a0..6dc4fa165 100644
--- a/profiles/pentoo/base/packages.build
+++ b/profiles/pentoo/base/packages.build
@@ -6,5 +6,3 @@ app-arch/xz-utils
app-arch/lbzip2
#this is needed for portage-9999 which is sometimes used for testing
dev-vcs/git
-#glib-utils and possibly others need this in stage3
-dev-python/docutils
diff --git a/profiles/pentoo/bootstrap/packages b/profiles/pentoo/bootstrap/packages
new file mode 100644
index 000000000..1b4f65254
--- /dev/null
+++ b/profiles/pentoo/bootstrap/packages
@@ -0,0 +1,2 @@
+#glib-utils and possibly others need this in stage3
+*dev-python/docutils
diff --git a/profiles/pentoo/bootstrap/packages.build b/profiles/pentoo/bootstrap/packages.build
new file mode 100644
index 000000000..26e5509c1
--- /dev/null
+++ b/profiles/pentoo/bootstrap/packages.build
@@ -0,0 +1,2 @@
+#glib-utils and possibly others need this in stage3
+dev-python/docutils