mirror of
https://github.com/Hopiu/django-model-utils.git
synced 2026-03-26 08:10:30 +00:00
Merge pull request #532 from hramezani/update_versions
Update support of Python and Django versions
This commit is contained in:
commit
157ee9bc5a
10 changed files with 28 additions and 28 deletions
4
.github/workflows/test.yml
vendored
4
.github/workflows/test.yml
vendored
|
|
@ -9,11 +9,11 @@ jobs:
|
|||
fail-fast: false
|
||||
max-parallel: 5
|
||||
matrix:
|
||||
python-version: ['3.6', '3.7', '3.8', '3.9', '3.10']
|
||||
python-version: ['3.7', '3.8', '3.9', '3.10']
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:10
|
||||
image: postgres:12
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
|
|
|
|||
|
|
@ -12,3 +12,9 @@ repos:
|
|||
- id: flake8
|
||||
args: ['--ignore=E402,E501,E731,W503']
|
||||
files: ^(model_utils|tests)/
|
||||
|
||||
- repo: https://github.com/asottile/pyupgrade
|
||||
rev: v2.37.3
|
||||
hooks:
|
||||
- id: pyupgrade
|
||||
args: [--py37-plus]
|
||||
|
|
|
|||
|
|
@ -8,6 +8,9 @@ Unreleased
|
|||
- Add Spanish translation
|
||||
- Add French translation
|
||||
- Drop Django 1.7 workaround from `select_subclasses()`
|
||||
- Drop support for `Django < 3.2`
|
||||
- Drop support for `Python 3.6`
|
||||
- Confirm support for `Django 4.1`
|
||||
|
||||
4.2.0 (2021-10-11)
|
||||
------------------
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ django-model-utils
|
|||
|
||||
Django model mixins and utilities.
|
||||
|
||||
``django-model-utils`` supports `Django`_ 2.2+.
|
||||
``django-model-utils`` supports `Django`_ 3.2+.
|
||||
|
||||
.. _Django: http://www.djangoproject.com/
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ modify your ``INSTALLED_APPS`` setting.
|
|||
Dependencies
|
||||
============
|
||||
|
||||
``django-model-utils`` supports `Django`_ 2.2, 3.1 and 3.2 (latest bugfix
|
||||
release in each series only) on Python 3.6+.
|
||||
``django-model-utils`` supports `Django`_ 3.2+ (latest bugfix
|
||||
release in each series only) on Python 3.7+.
|
||||
|
||||
.. _Django: http://www.djangoproject.com/
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ class InheritanceQuerySetMixin:
|
|||
"""
|
||||
if not issubclass(model, self.model):
|
||||
raise ValueError(
|
||||
"{!r} is not a subclass of {!r}".format(model, self.model))
|
||||
f"{model!r} is not a subclass of {self.model!r}")
|
||||
|
||||
ancestry = []
|
||||
# should be a OneToOneField or None
|
||||
|
|
@ -308,7 +308,7 @@ class JoinQueryset(models.QuerySet):
|
|||
|
||||
# Put additional quotes around string.
|
||||
params = [
|
||||
'\'{}\''.format(p)
|
||||
f'\'{p}\''
|
||||
if isinstance(p, str) else p
|
||||
for p in params
|
||||
]
|
||||
|
|
@ -338,7 +338,7 @@ class JoinQueryset(models.QuerySet):
|
|||
if getattr(fk, 'related_model', None) == self.model
|
||||
]
|
||||
fk = fk[0] if fk else None
|
||||
model_set = '{}_set'.format(self.model.__name__.lower())
|
||||
model_set = f'{self.model.__name__.lower()}_set'
|
||||
key = fk or getattr(qs.model, model_set, None)
|
||||
|
||||
if not key:
|
||||
|
|
|
|||
9
setup.py
9
setup.py
|
|
@ -8,7 +8,7 @@ def long_desc(root_path):
|
|||
for filename in FILES:
|
||||
filepath = os.path.realpath(os.path.join(root_path, filename))
|
||||
if os.path.isfile(filepath):
|
||||
with open(filepath, mode='r') as f:
|
||||
with open(filepath) as f:
|
||||
yield f.read()
|
||||
|
||||
|
||||
|
|
@ -29,7 +29,8 @@ setup(
|
|||
maintainer='JazzBand',
|
||||
url='https://github.com/jazzband/django-model-utils',
|
||||
packages=find_packages(exclude=['tests*']),
|
||||
install_requires=['Django>=2.2'],
|
||||
python_requires=">=3.7",
|
||||
install_requires=['Django>=3.2'],
|
||||
classifiers=[
|
||||
'Development Status :: 5 - Production/Stable',
|
||||
'Environment :: Web Environment',
|
||||
|
|
@ -38,16 +39,14 @@ setup(
|
|||
'Operating System :: OS Independent',
|
||||
'Programming Language :: Python',
|
||||
'Programming Language :: Python :: 3',
|
||||
'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',
|
||||
'Framework :: Django',
|
||||
'Framework :: Django :: 2.2',
|
||||
'Framework :: Django :: 3.1',
|
||||
'Framework :: Django :: 3.2',
|
||||
'Framework :: Django :: 4.0',
|
||||
'Framework :: Django :: 4.1',
|
||||
],
|
||||
zip_safe=False,
|
||||
package_data={
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import django
|
||||
from django.db import models
|
||||
from django.db.models import Manager
|
||||
from django.db.models.query_utils import DeferredAttribute
|
||||
|
|
@ -387,13 +386,9 @@ class StringyDescriptor:
|
|||
return self
|
||||
if self.name in obj.get_deferred_fields():
|
||||
# This queries the database, and sets the value on the instance.
|
||||
if django.VERSION < (3, 0):
|
||||
DeferredAttribute(field_name=self.name).__get__(obj, cls)
|
||||
else:
|
||||
# Since Django 3.0, DeferredAttribute wants a field argument.
|
||||
fields_map = {f.name: f for f in cls._meta.fields}
|
||||
field = fields_map[self.name]
|
||||
DeferredAttribute(field=field).__get__(obj, cls)
|
||||
fields_map = {f.name: f for f in cls._meta.fields}
|
||||
field = fields_map[self.name]
|
||||
DeferredAttribute(field=field).__get__(obj, cls)
|
||||
return str(obj.__dict__[self.name])
|
||||
|
||||
def __set__(self, obj, value):
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ from tests.models import BoxJoinModel, JoinItemForeignKey
|
|||
class JoinManagerTest(TestCase):
|
||||
def setUp(self):
|
||||
for i in range(20):
|
||||
BoxJoinModel.objects.create(name='name_{i}'.format(i=i))
|
||||
BoxJoinModel.objects.create(name=f'name_{i}')
|
||||
|
||||
JoinItemForeignKey.objects.create(
|
||||
weight=10, belonging=BoxJoinModel.objects.get(name='name_1')
|
||||
|
|
|
|||
9
tox.ini
9
tox.ini
|
|
@ -1,14 +1,12 @@
|
|||
[tox]
|
||||
envlist =
|
||||
py{36,37,38,39}-dj{22,31}
|
||||
py{36,37,38,39,310}-dj32
|
||||
py{38,39,310}-dj{40,main}
|
||||
py{37,38,39,310}-dj32
|
||||
py{38,39,310}-dj{40,41,main}
|
||||
flake8
|
||||
isort
|
||||
|
||||
[gh-actions]
|
||||
python =
|
||||
3.6: py36
|
||||
3.7: py37
|
||||
3.8: py38, flake8, isort
|
||||
3.9: py39
|
||||
|
|
@ -18,10 +16,9 @@ python =
|
|||
deps =
|
||||
freezegun==0.3.12
|
||||
-rrequirements-test.txt
|
||||
dj22: Django==2.2.*
|
||||
dj31: Django==3.1.*
|
||||
dj32: Django==3.2.*
|
||||
dj40: Django==4.0.*
|
||||
dj41: Django==4.1.*
|
||||
djmain: https://github.com/django/django/archive/main.tar.gz
|
||||
ignore_outcome =
|
||||
djmain: True
|
||||
|
|
|
|||
Loading…
Reference in a new issue