update django-3.2.4

This commit is contained in:
Andreas Billmeier 2021-06-14 11:46:18 +02:00 committed by Andreas Billmeier
parent 8f73e56bd2
commit c6da244a90
8 changed files with 119 additions and 334 deletions

View File

@ -1,13 +1,7 @@
AUX django-1.9-bashcomp.patch 1734 BLAKE2B d65bc505e4096fd8d23619f3d76b76d66fc3e68f408906c30a1a8e97a5ef5c0c9c1b352f8c4f4acd1588c639f7b0a489a53e1dbc9763b395ce2488c463e6d5b4 SHA512 d3caa9b77d6c336e131b706411080aa129df83ac60293a2612eb268d08a6c40096b322715766801e16a641134762174ecefcf2b93698f47b022fc31421597403
AUX django-2.0.7-bashcomp.patch 1507 BLAKE2B 8aeb494087dbccffc69ad43f370e791d9fbfb1908d45f55d5f8be01ec0f3af6b2aff591da84a06c0858fecd44180579a4647d622ef57d8235ccb4b3b80fd3a2a SHA512 5a3867b8e4f2fafe4c53a741d41e8c6e8e28a55463f7d8007afd669a04daa8b93f911e4ef8d5ad38ba300558f21ac8090b00337d0c0bfb93b2aea73a179334a4
DIST Django-2.1.9.tar.gz 8608747 BLAKE2B d5ef1aacc30067dfe5369655eb23ea67788f22edcf8ba070944c0fb4fdf2fc3628a364d480a3d47bae0339255fb66a3bc27f11eb5f07280812ab5f57b4367c64 SHA512 1f6ad122012d898da52ce44465700d2492ef9002d5c327b25e3edfe2116b8a1143feab79751a581029664311452d52d96fe116d8817edb0ef7d7dbddfc0a5ec7
DIST Django-2.2.1.tar.gz 8973889 BLAKE2B 890ab092807a587dbaba69fb6da7a4c53c8e976d3a4c29003549d72dd69c374640df280885a62845dda0d00f432e398747b9ed652aebbd7e3434c07e71d9a80f SHA512 661ed7352847d2167f8d3410b476cb585a269ef5d3afe0cb59cf0c9a2ea22f0572f12825368bc222f33f8c6d4c71767adade97e25b69f5a619795ccb670773e2
DIST Django-2.2.2.tar.gz 8841523 BLAKE2B fc498c19caed7fc8766b015df3049ce325886ebcebf02a1f6618c13ea9d12dea56ad65b860f3b0dee0b6532d97e754bb8cca2c3f0a375c630c28d52a2fd62a2e SHA512 87e0a7b2d0e6d6149c746a7cd5547351ba002c6eaedac160e72544b429d41b133da5c36256a07155b7b4743969e9ff4c3ac890c9925db428117f68a67104df0f
DIST Django-3.0.8.tar.gz 9080731 BLAKE2B b3276527c9c5eba18b380204c498ebd5724e5211640ead9e05284eb013f907ce6799125b29e2030bc37ecd5a1022e6eb3f193eca5e2c6520adef630d6d2114a9 SHA512 92d169fb37883355f1898fc13b54b6732ec14d71f77e4b91db30dd9bfb5df8b34c1c9566af6ddc37e00a9e3eadd38b6a51ff604a4da4285167f66b55215be301
AUX django-3.1-bashcomp.patch 2085 BLAKE2B 36a0aa4d3413f13089ac104f5d3f98ecbb152a9a5a35f8c1ff2e5ffc9824153b0ac89f1cbca76c31a1afefde471e4d6ed801e405551b25cb31da89c20f3019cc SHA512 82dceede4292bad6e3e4966a6dba01bd2bbc7db494fce592e25dc4a64236485d88d8ad67b247239a80f8fe96dff054d20afea6f48a5518b67cf88404d399e61c
AUX django-3.2.3-py310-repr.patch 3827 BLAKE2B 42f68fecf8fba65ffc23d19f95b5232ed020005d347fce1b30bd6a18755e649bc00ebd6aa7235810564e8954726dda4f541c58c599a9433d3ecd539717b97284 SHA512 6cfc9ee5f8c5c9a59bfeb5311e853604a6f77c7c747deb48780122f06e7634ea783f5ae82c4935a2a25f1cac358175cb8cbaa6285bd26da5e6fd35d3e3958e1c
DIST Django-3.1.tar.gz 9382872 BLAKE2B 31f2a45cf31f87401ac1834be81cf207ca48f720bf6d6885b774fb51f42616be1346b8ab71d6c0b605d99bc7422f27b21665729b78e00c9cc0ba9cf3e4d788f3 SHA512 31f0821966f4ebc6b2a719b69f1137a32a7228414221e8938a66c9b940465c008761bd380ba9ea603e3693d38c233d6f23afe0cbe5647eb2478844ce2d0e7fd4
EBUILD django-2.1.9.ebuild 2486 BLAKE2B e01726e5d4ddfe5e53e2934c63342b9a383aca9a4cf19605f49cca1d955a8d4866c13aabfb767e04adf585ed72608ea15d733ebbf3e2cf668b4bfac60127a530 SHA512 db5774a6592405cc5dcfb4a7cedb245a9e4912aa528f4ca2a94838a9b510f44fe339ce7970d1b4318a0321ccdb69b1e50210b899142bdb700524e2f6a548c76a
EBUILD django-2.2.1.ebuild 2575 BLAKE2B 6b86a76f6374178bd9554e4b76a9df2e383b00814dd335e61d7b4306aa3f5144f0bad968a52562752a5ad82917e538b88964df7832b5d438a89275e37f6b2170 SHA512 3ab2b1a0dde857c6bbf1f3def4505f629b441cd4354c1efc805f554bfc25faafc1719f0ba59a11d37e7d6170a6472047af196d1aa9c039a0e9a5bca04628af6f
EBUILD django-2.2.2.ebuild 2577 BLAKE2B adcbcca4dfbe8d9b50bf214319ffaa86853d8ff0d033221f949d461378450bb16a055a9944958deb1c4481d84d09be24f6194c1c1c362f3cb14abf0156f51ca9 SHA512 faabbe0cc1045ced6b49166fee7b21a0b26bed16ba2d8bee0782f8adf73b46841e898d01f70273fa3140e01e0b99a897b8c0e17cd65ea35c52588a6d167b348b
EBUILD django-3.0.8.ebuild 2570 BLAKE2B cd5b72cb4c5ce2792b7ec2f797138ac1fcdb82fee0abb592f941ec85ce80654d0728748f52c836bc313ee98fe2058d1f5d0827ac396356d7e2dd28420e34cf7f SHA512 6c05e5d9cb336b31db2a427c4fbacaa64bcbec02b31223172990aa1211bbc254a26466756d44ba2fc410fa3b988422ead17a21c2d01becd17575ae4743568ba5
DIST Django-3.2.4.tar.gz 9824343 BLAKE2B 25123c228171953e057fe6ba75afadc49c49567e167045c292606e914538f58f9628e48485f611afaacd7e173f36c720391c06662f8dcd796e966f7557f60216 SHA512 5891f77c884cb4bc74f4c9759e2e7be463fc0c661b8dd4d889be0ec46919e59b81f5ce1585c28075b15f03355e66d4b8e7b09001f0c2bea15f8c8aac77d1ea16
EBUILD django-3.1.ebuild 2570 BLAKE2B cd5b72cb4c5ce2792b7ec2f797138ac1fcdb82fee0abb592f941ec85ce80654d0728748f52c836bc313ee98fe2058d1f5d0827ac396356d7e2dd28420e34cf7f SHA512 6c05e5d9cb336b31db2a427c4fbacaa64bcbec02b31223172990aa1211bbc254a26466756d44ba2fc410fa3b988422ead17a21c2d01becd17575ae4743568ba5
EBUILD django-3.2.4.ebuild 2568 BLAKE2B 1bd1d8ef9cb3413e4372e8ff92f966e49a54cf746a2737749e2694492cd186272cdd8072053015348b4c5f5bf7586893d6eceaf00015b0eb6c7a18158acec675 SHA512 3636b4e15210d2588c32e6876f85468622c0bf2140f432b86373f30a084e54ce34bcdfe7367b43948ed607f983b165a6f26cb22b0f326901aab78eacb405b2fc
MISC metadata.xml 473 BLAKE2B 6cac5d67c4fe83a1e06040e023799bfccc56e9b79d53a4d3ceecd56f4ae3a6f5871c98df991111c74a1018aac26ee67e2318f1ed1f92533c44a6046adc1dcca9 SHA512 3f8475b63bcbc565f0c7f0f5a4a81aa7b35bbf08b23589a6f9282681dbb4fd5f38d893e4e18dedb12858b1e76e72d6185ef6e5dbcf40b392422a0d7d1e52d9af

View File

@ -1,88 +0,0 @@
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
PYTHON_COMPAT=( python3_{8..9} )
PYTHON_REQ_USE='sqlite?,threads(+)'
inherit bash-completion-r1 distutils-r1 eutils
MY_PN="Django"
MY_P="${MY_PN}-${PV}"
DESCRIPTION="High-level Python web framework"
HOMEPAGE="https://www.djangoproject.com/ https://pypi.org/project/Django/"
SRC_URI="https://www.djangoproject.com/m/releases/$(ver_cut 1-2)/${MY_P}.tar.gz"
LICENSE="BSD"
# admin fonts: Roboto (media-fonts/roboto)
LICENSE+=" Apache-2.0"
# admin icons, jquery, xregexp.js
LICENSE+=" MIT"
SLOT="0"
KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
IUSE="doc sqlite test"
RESTRICT="!test? ( test )"
RDEPEND="dev-python/pytz[${PYTHON_USEDEP}]"
BDEPEND="
dev-python/setuptools[${PYTHON_USEDEP}]
doc? ( dev-python/sphinx[${PYTHON_USEDEP}] )
test? (
$(python_gen_impl_dep sqlite)
dev-python/docutils[${PYTHON_USEDEP}]
dev-python/numpy[${PYTHON_USEDEP}]
dev-python/pillow[${PYTHON_USEDEP}]
dev-python/pyyaml[${PYTHON_USEDEP}]
dev-python/mock[${PYTHON_USEDEP}]
)"
S="${WORKDIR}/${MY_P}"
PATCHES=(
"${FILESDIR}"/${PN}-2.0.7-bashcomp.patch
)
python_prepare_all() {
# Prevent d'loading in the doc build
sed -e '/^ "sphinx.ext.intersphinx",/d' -i docs/conf.py || die
distutils-r1_python_prepare_all
}
python_compile_all() {
use doc && emake -C docs html
}
python_test() {
# Tests have non-standard assumptions about PYTHONPATH,
# and don't work with ${BUILD_DIR}/lib.
PYTHONPATH=. "${PYTHON}" tests/runtests.py --settings=test_sqlite -v2 \
|| die "Tests fail with ${EPYTHON}"
}
python_install_all() {
newbashcomp extras/django_bash_completion ${PN}-admin
bashcomp_alias ${PN}-admin django-admin.py
if use doc; then
rm -fr docs/_build/html/_sources || die
local HTML_DOCS=( docs/_build/html/. )
fi
distutils-r1_python_install_all
}
pkg_postinst() {
elog "Additional Backend support can be enabled via"
optfeature "MySQL backend support" dev-python/mysqlclient
optfeature "PostgreSQL backend support" dev-python/psycopg:2
echo ""
elog "Other features can be enhanced by"
optfeature "GEO Django" sci-libs/gdal[geos]
optfeature "Memcached support" dev-python/pylibmc dev-python/python-memcached
optfeature "ImageField Support" dev-python/pillow
optfeature "Password encryption" dev-python/bcrypt
optfeature "High-level abstractions for Django forms" dev-python/django-formtools
}

View File

@ -1,91 +0,0 @@
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
PYTHON_COMPAT=( python3_{8..9} )
PYTHON_REQ_USE='sqlite?,threads(+)'
inherit bash-completion-r1 distutils-r1 eutils
MY_PN="Django"
MY_P="${MY_PN}-${PV}"
DESCRIPTION="High-level Python web framework"
HOMEPAGE="https://www.djangoproject.com/ https://pypi.org/project/Django/"
SRC_URI="https://www.djangoproject.com/m/releases/$(ver_cut 1-2)/${MY_P}.tar.gz"
LICENSE="BSD"
# admin fonts: Roboto (media-fonts/roboto)
LICENSE+=" Apache-2.0"
# admin icons, jquery, xregexp.js
LICENSE+=" MIT"
SLOT="0"
KEYWORDS="amd64 ~arm64 ~ppc ~ppc64 x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
IUSE="doc sqlite test"
RESTRICT="!test? ( test )"
RDEPEND="
dev-python/pytz[${PYTHON_USEDEP}]
dev-python/python-sqlparse[${PYTHON_USEDEP}]"
BDEPEND="
dev-python/setuptools[${PYTHON_USEDEP}]
doc? ( dev-python/sphinx[${PYTHON_USEDEP}] )
test? (
$(python_gen_impl_dep sqlite)
dev-python/docutils[${PYTHON_USEDEP}]
dev-python/jinja[${PYTHON_USEDEP}]
dev-python/numpy[${PYTHON_USEDEP}]
dev-python/pillow[webp,${PYTHON_USEDEP}]
dev-python/pyyaml[${PYTHON_USEDEP}]
dev-python/tblib[${PYTHON_USEDEP}]
)"
S="${WORKDIR}/${MY_P}"
PATCHES=(
"${FILESDIR}"/${PN}-2.0.7-bashcomp.patch
)
python_prepare_all() {
# Prevent d'loading in the doc build
sed -e '/^ "sphinx.ext.intersphinx",/d' -i docs/conf.py || die
distutils-r1_python_prepare_all
}
python_compile_all() {
use doc && emake -C docs html
}
python_test() {
# Tests have non-standard assumptions about PYTHONPATH,
# and don't work with ${BUILD_DIR}/lib.
PYTHONPATH=. "${PYTHON}" tests/runtests.py --settings=test_sqlite -v2 \
|| die "Tests fail with ${EPYTHON}"
}
python_install_all() {
newbashcomp extras/django_bash_completion ${PN}-admin
bashcomp_alias ${PN}-admin django-admin.py
if use doc; then
rm -fr docs/_build/html/_sources || die
local HTML_DOCS=( docs/_build/html/. )
fi
distutils-r1_python_install_all
}
pkg_postinst() {
elog "Additional Backend support can be enabled via"
optfeature "MySQL backend support" dev-python/mysqlclient
optfeature "PostgreSQL backend support" dev-python/psycopg:2
echo ""
elog "Other features can be enhanced by"
optfeature "GEO Django" sci-libs/gdal[geos]
optfeature "Memcached support" dev-python/pylibmc dev-python/python-memcached
optfeature "ImageField Support" dev-python/pillow
optfeature "Password encryption" dev-python/bcrypt
optfeature "High-level abstractions for Django forms" dev-python/django-formtools
}

View File

@ -1,91 +0,0 @@
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
PYTHON_COMPAT=( python3_{8..9} )
PYTHON_REQ_USE='sqlite?,threads(+)'
inherit bash-completion-r1 distutils-r1 eutils
MY_PN="Django"
MY_P="${MY_PN}-${PV}"
DESCRIPTION="High-level Python web framework"
HOMEPAGE="https://www.djangoproject.com/ https://pypi.org/project/Django/"
SRC_URI="https://www.djangoproject.com/m/releases/$(ver_cut 1-2)/${MY_P}.tar.gz"
LICENSE="BSD"
# admin fonts: Roboto (media-fonts/roboto)
LICENSE+=" Apache-2.0"
# admin icons, jquery, xregexp.js
LICENSE+=" MIT"
SLOT="0"
KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
IUSE="doc sqlite test"
RESTRICT="!test? ( test )"
RDEPEND="
dev-python/pytz[${PYTHON_USEDEP}]
dev-python/python-sqlparse[${PYTHON_USEDEP}]"
BDEPEND="
dev-python/setuptools[${PYTHON_USEDEP}]
doc? ( dev-python/sphinx[${PYTHON_USEDEP}] )
test? (
$(python_gen_impl_dep sqlite)
dev-python/docutils[${PYTHON_USEDEP}]
dev-python/jinja[${PYTHON_USEDEP}]
dev-python/numpy[${PYTHON_USEDEP}]
dev-python/pillow[webp,${PYTHON_USEDEP}]
dev-python/pyyaml[${PYTHON_USEDEP}]
dev-python/tblib[${PYTHON_USEDEP}]
)"
S="${WORKDIR}/${MY_P}"
PATCHES=(
"${FILESDIR}"/${PN}-2.0.7-bashcomp.patch
)
python_prepare_all() {
# Prevent d'loading in the doc build
sed -e '/^ "sphinx.ext.intersphinx",/d' -i docs/conf.py || die
distutils-r1_python_prepare_all
}
python_compile_all() {
use doc && emake -C docs html
}
python_test() {
# Tests have non-standard assumptions about PYTHONPATH,
# and don't work with ${BUILD_DIR}/lib.
PYTHONPATH=. "${PYTHON}" tests/runtests.py --settings=test_sqlite -v2 \
|| die "Tests fail with ${EPYTHON}"
}
python_install_all() {
newbashcomp extras/django_bash_completion ${PN}-admin
bashcomp_alias ${PN}-admin django-admin.py
if use doc; then
rm -fr docs/_build/html/_sources || die
local HTML_DOCS=( docs/_build/html/. )
fi
distutils-r1_python_install_all
}
pkg_postinst() {
elog "Additional Backend support can be enabled via"
optfeature "MySQL backend support" dev-python/mysqlclient
optfeature "PostgreSQL backend support" dev-python/psycopg:2
echo ""
elog "Other features can be enhanced by"
optfeature "GEO Django" sci-libs/gdal[geos]
optfeature "Memcached support" dev-python/pylibmc dev-python/python-memcached
optfeature "ImageField Support" dev-python/pillow
optfeature "Password encryption" dev-python/bcrypt
optfeature "High-level abstractions for Django forms" dev-python/django-formtools
}

View File

@ -44,7 +44,7 @@ BDEPEND="
S="${WORKDIR}/${MY_P}"
PATCHES=(
"${FILESDIR}"/${PN}-2.0.7-bashcomp.patch
"${FILESDIR}"/${PN}-3.1-bashcomp.patch
)
python_prepare_all() {

View File

@ -1,41 +0,0 @@
--- a/extras/django_bash_completion
+++ b/extras/django_bash_completion
@@ -37,37 +37,4 @@ _django_completion()
COMP_CWORD=$COMP_CWORD \
DJANGO_AUTO_COMPLETE=1 $1 ) )
}
-complete -F _django_completion -o default django-admin.py manage.py django-admin
-
-_python_django_completion()
-{
- if [[ ${COMP_CWORD} -ge 2 ]]; then
- local PYTHON_EXE=${COMP_WORDS[0]##*/}
- echo $PYTHON_EXE | egrep "python([3-9]\.[0-9])?" >/dev/null 2>&1
- if [[ $? == 0 ]]; then
- local PYTHON_SCRIPT=${COMP_WORDS[1]##*/}
- echo $PYTHON_SCRIPT | egrep "manage\.py|django-admin(\.py)?" >/dev/null 2>&1
- if [[ $? == 0 ]]; then
- COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]:1}" \
- COMP_CWORD=$(( COMP_CWORD-1 )) \
- DJANGO_AUTO_COMPLETE=1 ${COMP_WORDS[*]} ) )
- fi
- fi
- fi
-}
-
-# Support for multiple interpreters.
-unset pythons
-if command -v whereis &>/dev/null; then
- python_interpreters=$(whereis python | cut -d " " -f 2-)
- for python in $python_interpreters; do
- [[ $python != *-config ]] && pythons="${pythons} ${python##*/}"
- done
- unset python_interpreters
- pythons=$(echo $pythons | tr " " "\n" | sort -u | tr "\n" " ")
-else
- pythons=python
-fi
-
-complete -F _python_django_completion -o default $pythons
-unset pythons
+complete -F _django_completion -o default django-admin.py django-admin

View File

@ -1,27 +1,34 @@
extras/django_bash_completion | 35 +----------------------------------
1 file changed, 1 insertion(+), 34 deletions(-)
From e0a8c0663debeb222bf78b97678f60929313b60a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
Date: Wed, 6 May 2020 07:24:05 +0200
Subject: [PATCH] Remove completions unsuitable for autoloading
The override of 'python*' completions, as well as the attempt
to './manage.py' completion are not going to work with autoloader.
Strip them.
---
extras/django_bash_completion | 33 +--------------------------------
1 file changed, 1 insertion(+), 32 deletions(-)
diff --git a/extras/django_bash_completion b/extras/django_bash_completion
index 06a2321..abe76e5 100755
index fa77d59aff..dfeb439a2e 100755
--- a/extras/django_bash_completion
+++ b/extras/django_bash_completion
@@ -37,37 +37,4 @@ _django_completion()
COMP_CWORD=$COMP_CWORD \
@@ -37,35 +37,4 @@ _django_completion()
DJANGO_AUTO_COMPLETE=1 $1 ) )
}
# When the django-admin.py deprecation ends, remove django-admin.py.
-complete -F _django_completion -o default django-admin.py manage.py django-admin
-
-_python_django_completion()
-{
- if [[ ${COMP_CWORD} -ge 2 ]]; then
- local PYTHON_EXE=${COMP_WORDS[0]##*/}
- echo $PYTHON_EXE | egrep "python([2-9]\.[0-9])?" >/dev/null 2>&1
- if [[ $? == 0 ]]; then
- if echo "$PYTHON_EXE" | grep -qE "python([3-9]\.[0-9])?"; then
- local PYTHON_SCRIPT=${COMP_WORDS[1]##*/}
- echo $PYTHON_SCRIPT | egrep "manage\.py|django-admin(\.py)?" >/dev/null 2>&1
- if [[ $? == 0 ]]; then
- COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]:1}" \
- COMP_CWORD=$(( COMP_CWORD-1 )) \
- if echo "$PYTHON_SCRIPT" | grep -qE "manage\.py|django-admin(\.py)?"; then
- COMPREPLY=( $( COMP_WORDS=( "${COMP_WORDS[*]:1}" )
- COMP_CWORD=$(( COMP_CWORD-1 ))
- DJANGO_AUTO_COMPLETE=1 ${COMP_WORDS[*]} ) )
- fi
- fi
@ -36,7 +43,7 @@ index 06a2321..abe76e5 100755
- [[ $python != *-config ]] && pythons="${pythons} ${python##*/}"
- done
- unset python_interpreters
- pythons=$(echo $pythons | tr " " "\n" | sort -u | tr "\n" " ")
- pythons=$(echo "$pythons" | tr " " "\n" | sort -u | tr "\n" " ")
-else
- pythons=python
-fi
@ -44,3 +51,6 @@ index 06a2321..abe76e5 100755
-complete -F _python_django_completion -o default $pythons
-unset pythons
+complete -F _django_completion -o default django-admin.py django-admin
--
2.28.0

View File

@ -0,0 +1,92 @@
diff --git a/django/db/models/constraints.py b/django/db/models/constraints.py
index b073df17636a..6dfc42942f79 100644
--- a/django/db/models/constraints.py
+++ b/django/db/models/constraints.py
@@ -4,6 +4,7 @@
from django.db.models.indexes import IndexExpression
from django.db.models.query_utils import Q
from django.db.models.sql.query import Query
+from django.utils.version import PY310
__all__ = ['CheckConstraint', 'Deferrable', 'UniqueConstraint']
@@ -85,6 +86,11 @@ class Deferrable(Enum):
DEFERRED = 'deferred'
IMMEDIATE = 'immediate'
+ # A similar format is used in Python 3.10+.
+ if not PY310:
+ def __repr__(self):
+ return '%s.%s' % (self.__class__.__qualname__, self._name_)
+
class UniqueConstraint(BaseConstraint):
def __init__(
@@ -218,7 +224,7 @@ def __repr__(self):
'' if not self.expressions else ' expressions=%s' % repr(self.expressions),
' name=%s' % repr(self.name),
'' if self.condition is None else ' condition=%s' % self.condition,
- '' if self.deferrable is None else ' deferrable=%s' % self.deferrable,
+ '' if self.deferrable is None else ' deferrable=%r' % self.deferrable,
'' if not self.include else ' include=%s' % repr(self.include),
'' if not self.opclasses else ' opclasses=%s' % repr(self.opclasses),
)
diff --git a/django/db/models/enums.py b/django/db/models/enums.py
index 7082a397c237..dd9088597d4d 100644
--- a/django/db/models/enums.py
+++ b/django/db/models/enums.py
@@ -2,6 +2,7 @@
from types import DynamicClassAttribute
from django.utils.functional import Promise
+from django.utils.version import PY310
__all__ = ['Choices', 'IntegerChoices', 'TextChoices']
@@ -74,6 +75,11 @@ def __str__(self):
"""
return str(self.value)
+ # A similar format is used in Python 3.10+.
+ if not PY310:
+ def __repr__(self):
+ return '%s.%s' % (self.__class__.__qualname__, self._name_)
+
class IntegerChoices(int, Choices):
"""Class for creating enumerated integer choices."""
diff --git a/tests/model_enums/tests.py b/tests/model_enums/tests.py
index 78f8b146be92..cda835010d7e 100644
--- a/tests/model_enums/tests.py
+++ b/tests/model_enums/tests.py
@@ -48,7 +48,7 @@ def test_integerchoices(self):
self.assertEqual(Suit.values, [1, 2, 3, 4])
self.assertEqual(Suit.names, ['DIAMOND', 'SPADE', 'HEART', 'CLUB'])
- self.assertEqual(repr(Suit.DIAMOND), '<Suit.DIAMOND: 1>')
+ self.assertEqual(repr(Suit.DIAMOND), 'Suit.DIAMOND')
self.assertEqual(Suit.DIAMOND.label, 'Diamond')
self.assertEqual(Suit.DIAMOND.value, 1)
self.assertEqual(Suit['DIAMOND'], Suit.DIAMOND)
@@ -89,7 +89,7 @@ def test_textchoices(self):
self.assertEqual(YearInSchool.values, ['FR', 'SO', 'JR', 'SR', 'GR'])
self.assertEqual(YearInSchool.names, ['FRESHMAN', 'SOPHOMORE', 'JUNIOR', 'SENIOR', 'GRADUATE'])
- self.assertEqual(repr(YearInSchool.FRESHMAN), "<YearInSchool.FRESHMAN: 'FR'>")
+ self.assertEqual(repr(YearInSchool.FRESHMAN), 'YearInSchool.FRESHMAN')
self.assertEqual(YearInSchool.FRESHMAN.label, 'Freshman')
self.assertEqual(YearInSchool.FRESHMAN.value, 'FR')
self.assertEqual(YearInSchool['FRESHMAN'], YearInSchool.FRESHMAN)
diff --git a/django/utils/version.py b/django/utils/version.py
index 4b26586b36..b84ca7db27 100644
--- a/django/utils/version.py
+++ b/django/utils/version.py
@@ -13,7 +13,7 @@ PY36 = sys.version_info >= (3, 6)
PY37 = sys.version_info >= (3, 7)
PY38 = sys.version_info >= (3, 8)
PY39 = sys.version_info >= (3, 9)
-
+PY310 = sys.version_info >= (3, 10)
def get_version(version=None):
"""Return a PEP 440-compliant version number from VERSION."""