Headline changes
- New version scheme: django-stubs will now use the same major.minor version number as Django.
Our Django support policy remains the same: Older versions are still partially supported, and we will continue supporting them as long as it's not a maintenance burden. - Django 4.2: This release adds initial support for some new features in 4.2.
There is still work to do, feel free to open issues or submit pull requests! - mypy 1.2.0: Recommended mypy version updated to 1.2.0
- Compatibility: This is the last release to support Python version 3.7 and Django 4.0.
Django 4.2 additions
- Added
django.utils.http.content_disposition_header()
function by @alexmv in #1448 - Add stubs for new async
Model
methods by @bigfootjon in #1443
Other stubs additions
- Added
Query.join()
method by @RyanWalker277 in #1404 - Added
Query.where
attribute by @RyanWalker277 in #1407 - Added
Model
methodsdate_error_message()
,get_constraints()
,serializable_value()
,prepare_database_save()
Addedapp_label=
argument toAdminSite.get_app_list()
by @RyanWalker277 in #1413 - Added
BaseConstraint.default_violation_error_message
attribute by @RyanWalker277 in #1419 - Added
BaseUserCreationForm
class by @monosans in #1424 - Improve
Form
,FormSet
,BoundField
,ErrorDict
andErrorList
rendering types.
AddedIntegerField.step_size
attribute and argument by @monosans in #1427 - Added type
JSONObject.__init__()
constructor by @realsuayip in #1430 - Added
RenameIndex
migration from Django 4.1 by @karamanolev in #1438 - Added
STORAGES
setting by @federicobond in #1439
Stubs fixes
- Allow lazy translation strings for constraint
violation_error_message
arguments, attributes by @realsuayip in #1418 - Allow setting
SECRET_KEY
to be str or bytes, addSECRET_KEY_FALLBACKS
, updatePasswordResetTokenGenerator
by @christianbundy in #1411 - Allow passing
BaseExpression
toUniqueConstraint.expressions
by @realsuayip in #1420 - Allow middlewares to return
StreamingReponse
by @rik in #1421 - Removed
Manager.delete()
method which is not accessible onManager
by @mschoettle in #1431 - Allow lazy translation strings in email contexts by @realsuayip in #1442
- Fixed
aiterator()
method ofQuerySet
andBaseManager
by @kjagiello in #1449 - Syndication
Feed
items do not need to beModel
instances by @bigfootjon in #1444
Mypy plugin fixes
- Allow custom
Manager
andQuerySet
classes to be inner class ofModel
by @federicobond in #1392 - Fixed handling of
ForeignKey
in abstract models when usingto=
with a string reference by @Kircheneer in #1436 - Handle repeated field lookups in calls to
QuerySet.values_list()
by @leamingrad in #1441 - Handle
Model
relations created withForeignObject
/ForeignObjectRel
by @Photonios in #1451
Other improvements
Tests & CI
- Add tests for
QuerySet.select_related
returning queryset type by @flaeppe in #1400 - Add test for overriding User model manager by @flaeppe in #1401
- CI: Add Django 4.2 to typecheck and update other Django versions by @intgr in #1455
- CI: Stop testing with Python 3.7 by @intgr in #1453
- Run CI with Django 4.2 and declare support in package metadata by @intgr in #1452
Dependencies
- Sync pre-commit and requirements by @sobolevn in #1417
- Update compatible-mypy & CI to mypy 1.2.0 by @intgr in #1429
- Bump isort to 5.12.0 by @leamingrad in #1440
- Version 4.2.0 release (django-stubs, django-stubs-ext) by @intgr in #1458
Deferred for next release
- Added
decorators.AsyncGetResponseCallable
Protocol, but is not yet used anywhere by @RyanWalker277 in #1425 - Added
BaseModelMeta
for typing Model inner Meta class by @intgr in #1375 - Rename
BaseModelMeta
toTypedModelMeta
and document it by @intgr in #1456
New Contributors
- @realsuayip made their first contribution in #1418
- @monosans made their first contribution in #1424
- @karamanolev made their first contribution in #1438
- @Kircheneer made their first contribution in #1436
- @kjagiello made their first contribution in #1449
- @alexmv made their first contribution in #1448
- @bigfootjon made their first contribution in #1443
Full Changelog: 1.16.0...4.2.0