django-stubs icon indicating copy to clipboard operation
django-stubs copied to clipboard

Django 5.0 Tracking Issue

Open adamchainz opened this issue 2 years ago • 21 comments

This is a tracking issue for changes that will be needed for Django 5.0, based on in-development release notes.

EDIT: Please see https://github.com/typeddjango/django-stubs/issues/1493#issuecomment-2105730206 for an up to date progress list.

(Collapsed original list that is now outdated)
  • [ ] warnings in django.utils.deprecation
  • [ ] admin facets - ModelAdmin.show_facets, django.contrib.admin.ShowFacets enum
  • [ ] form field groups - BoundField.as_field_group(), django.forms.Field.template_name, django.forms.renderers.BaseRenderer.field_template_name
  • [ ] Database-computed default values - db_default arg and attr on model Field
  • [ ] django.contrib.admin.AdminSite.get_log_entries
  • [ ] django.http.HttpRequest.auser from AuthenticationMiddleware
  • [ ] django.contrib.gis.db.models.functions.ClosestPoint
  • [ ] django.contrib.postgres.constraints.ExclusionConstraint.violation_error_code
  • [ ] choices args to form ChoiceField and model Field support Choices classes directly.
  • [x] django.forms.URLField new assume_scheme arg
  • [ ] QuerySet.update_or_create and aupdate_or_create new create_defaults arg
  • [ ] new violation_error_code arg for BaseConstraint, CheckConstraint, and UniqueConstraint
  • [ ] new arg error_messages for django.core.paginator.Paginator.error_messages
  • [ ] new Signal.asend() and Signal.asend_robust() methods
  • [ ] The instance argument of the undocumented BaseModelFormSet.save_existing() method is renamed to obj.
  • [ ] The undocumented django.contrib.admin.helpers.checkbox is removed.
  • [ ] The undocumented Query.annotation_select_mask attribute is changed from a set of strings to an ordered list of strings.
  • [ ] Passing positional arguments name and violation_error_message to BaseConstraint is deprecated in favor of keyword-only arguments. (Let's make them keyword-only in the stubs in 5.0.)
  • [ ] request is added to the signature of ModelAdmin.lookup_allowed(). Support for ModelAdmin subclasses that do not accept this argument is deprecated.
  • [ ] The get_joining_columns() method of ForeignObject and ForeignObjectRel is deprecated. Starting with Django 6.0, django.db.models.sql.datastructures.Join will no longer fallback to get_joining_columns(). Subclasses should implement get_joining_fields() instead.
  • [ ] The undocumented django.utils.baseconv module is removed.
  • [ ] The undocumented django.utils.datetime_safe module is removed.
  • [ ] The extra_tests argument for DiscoverRunner.build_suite() and DiscoverRunner.run_tests() is removed.
  • [ ] The USE_L10N setting is removed.
  • [ ] Support for pytz timezones is removed.
  • [ ] The is_dst argument is removed from:
    • QuerySet.datetimes()
    • django.utils.timezone.make_aware()
    • django.db.models.functions.Trunc()
    • django.db.models.functions.TruncSecond()
    • django.db.models.functions.TruncMinute()
    • django.db.models.functions.TruncHour()
    • django.db.models.functions.TruncDay()
    • django.db.models.functions.TruncWeek()
    • django.db.models.functions.TruncMonth()
    • django.db.models.functions.TruncQuarter()
    • django.db.models.functions.TruncYear()
  • [ ] The django.contrib.gis.admin.GeoModelAdmin and OSMGeoAdmin classes are removed.
  • [ ]The undocumented BaseForm._html_output() method is removed.
  • The ability to return a str, rather than a SafeString, when rendering an ErrorDict and ErrorList is removed.
  • [ ] The SitemapIndexItem.__str__() method is removed.
  • [ ] The name argument of django.utils.functional.cached_property() is removed.
  • [ ] The opclasses argument of django.contrib.postgres.constraints.ExclusionConstraint is removed.
  • [ ] The undocumented ability to pass errors=None to SimpleTestCase.assertFormError() and assertFormsetError() is removed.
  • [ ] django.contrib.sessions.serializers.PickleSerializer is removed.
  • [ ] created=True is required in the signature of RemoteUserBackend.configure_user() subclasses.
  • [ ] Support for logging out via GET requests in the django.contrib.auth.views.LogoutView and django.contrib.auth.views.logout_then_login() is removed.
  • [ ] The django.utils.timezone.utc alias to datetime.timezone.utc is removed.
  • [ ] Passing a response object and a form/formset name to SimpleTestCase.assertFormError() and assertFormSetError() is no longer allowed.
  • [ ] The django.contrib.gis.admin.OpenLayersWidget is removed.
  • [x] The django.contrib.auth.hashers.CryptPasswordHasher is removed.
  • [ ] Passing nulls_first=False or nulls_last=False to Expression.asc() and Expression.desc() methods, and the OrderBy expression is no longer allowed.

adamchainz avatar May 12 '23 11:05 adamchainz

I hope that if we have such a list we can run through them after 5.0 is released, rather than have small issues trickle in as users discover what has been missed.

adamchainz avatar May 12 '23 11:05 adamchainz

Agreed, this is helpful, thanks!

I think it would be more urgent to compile such a list for Django 4.2 (and we also probably missed some stuff in 4.1 and older even)

intgr avatar May 13 '23 09:05 intgr

I did this one first because it's easier, since I didn't need to find related issues here...

adamchainz avatar May 16 '23 15:05 adamchainz

More changes since @adamchainz 's original message:

(Collapsed original list that is now outdated)
  • [x] django.db.models.GeneratedField
  • [ ] django.contrib.admin.AdminSite.get_model_admin
  • [ ] django.contrib.admin.ModelAdmin.list_display now supports boolean attribute
  • [x] django.contrib.auth.aauthenticate,aget_user,alogin,alogout,aupdate_session_auth_hash
  • [x] django.contrib.auth.hashers.acheck_password
  • [ ] django.contrib.gis.GEOSGeometry.equals_identical
  • [ ] django.contrib.messages.MessagesTestMixin.assertMessages
  • [ ] Model.save now supports tuples passed to force_insert
  • [ ] UniqueConstraint.nulls_distinct
  • [x] aget_object_or_404 and aget_list_or_404
  • [x] aprefetch_related_objects
  • [x] Client and AsyncClient have asession,alogin,aforce_login,alogout
  • [ ] AsyncClient now has follow parameter
  • [x] StepValueValidator now has offset parameter
  • [ ] DatabaseFeatures.supports_expression_defaults,supports_default_keyword_in_insert,supports_default_keyword_in_bulk_insert
  • [ ] django.contrib.sitemaps.ping_google removed
  • [ ] QuerySet.update_or_create now has create_defaults (if a model has that field name it now uses create_defaults__exact
  • [ ] AlreadyRegistered,NotRegistered moved: django.contrib.admin.{sites,exceptions}
  • [ ] DjangoDivFormRenderer,Jinja2DivFormRenderer deprecated
  • [ ] ForeignObject.get_reverse_joining_columns deprecated
  • [ ] format_html called without args or kwargs is deprecated
  • [ ] DatabaseOperations.field_cast_sql deprecated
  • [x] django.db.models.enums.ChoicesMeta renamed to ChoicesType
  • [ ] Prefetch.get_current_queryset deprecated
  • [ ] USE_DEPRECATED_PYTZ removed
  • [x] CSRF_COOKIE_MASKED removed

I think I got everything, I'll try and tackle everything in the list I just made first since I can click the checkboxes.

Question for maintainers, how big of a PR should I make? Should each line item here be its own commit in one massive PR? How should we handle the version bumps in a separate PR?

bigfootjon avatar Sep 23 '23 04:09 bigfootjon

I prefer small PRs that can be easily reviewed, each with a link to the relevant commit/source. Happy if they group some related features but not too large.

I’m not sure when we’d aim to support 5.0. It would be more productive right now to whittle down the outstanding todo list per the contributing guide.

adamchainz avatar Sep 23 '23 11:09 adamchainz

I just put up my first PR against this issue: https://github.com/typeddjango/django-stubs/pull/1741

For anyone else working on this, I found the blame view of the release notes on GitHub to be really helpful in tracking down the exact commit for a change: https://github.com/django/django/blame/main/docs/releases/5.0.txt

I'm about to go on a work trip for a few days so I won't be terribly responsive, but I wanted to get the first one of these going to make sure I'm doing everything right before I burn through more of the changes. Hopefully this PR isn't too far off base!

bigfootjon avatar Sep 28 '23 05:09 bigfootjon

Since 5.0 was officially released, I opened PR #1859 to update to it in our CI. (UPDATE: Merged now)

Also generated a separate stubtest allowlist for Django 5.0:

https://github.com/typeddjango/django-stubs/blob/master/scripts/stubtest/allowlist_todo_django50.txt

intgr avatar Dec 06 '23 15:12 intgr

Holy thing. Looks like giant work. db_default already affected me.

(venv) ➜  backend git:(main) ✗ mypy server
server/apps/main/models.py:25: error: Unexpected keyword argument "db_default" for "CharField"; did you mean "default"?  [call-arg]
Found 1 error in 1 file (checked 25 source files)

Skorpyon avatar Dec 11 '23 18:12 Skorpyon

Holy thing. Looks like giant work.

Yep. To repeat just in case: if someone's interested in contributing, please keep PRs small and focused on one topic.

intgr avatar Dec 11 '23 19:12 intgr

please keep PRs small and focused on one topic

If talk about db_default at first look it simple:

class CharField(Field[_ST, _GT]):
    def __init__(
        self,
        ...
        db_default: Any = ...,
        ...
    ) -> None: ...

but I not understand how split .pyi versions between Django <5 and >=5 May you advice how django-stubs control Django version's features?

Skorpyon avatar Dec 13 '23 18:12 Skorpyon

If talk about db_default at first look it simple:

Great! 🎉

but I not understand how split .pyi versions between Django <5 and >=5 May you advice how django-stubs control Django version's features?

Don't worry about that. When there are differences between Django versions, django-stubs tracks the latest Django version (discussion here: https://github.com/typeddjango/django-stubs/issues/1095#issuecomment-1307066177).

intgr avatar Dec 13 '23 18:12 intgr

Do we have a sense for which of these TODOs are release blockers? Right now django-stubs is my only dependency blocking a Django 5.0 upgrade, so I'm interested to know what the next steps are to add enough compatibility.

christianbundy avatar Jan 22 '24 22:01 christianbundy

I will have some time this week to work on the 5.0 changes

Viicos avatar Feb 14 '24 12:02 Viicos

Do we have a sense for which of these TODOs are release blockers?

I wouldn't consider any of them release blockers. No reason to delay improvements that are ready now, because everything is not yet perfect. But of course additional updates would be great to have.

But the priority for the release should be on getting open PRs reviewed and merged (ones that are close to being ready -- ignore the older messy ones).

The real reason for the lack of releases is that nobody has stepped up to do the release. Usually I was the one handling releases and reviewing PRs that fell through the cracks. But I had a long vacation and after that haven't found the right combination of time and motivation to push the next release forward. In retrospect I should have been more explicit about communicating my absence. But I didn't expect it to take this long.

If someone (preferably a current maintainer) is interested in handling the release, I'd be happy to instruct and help. But if not, I will get to it, but don't want to make promises yet.

Right now django-stubs is my only dependency blocking a Django 5.0 upgrade

Don't let that block your upgrade. django-stubs 4.2.7 works fine with Django 5.0 too, I've been using it myself. Any new or changed Django APIs may give type errors, but those can be solved with # type: ignore suppression until django-stubs catches up.

intgr avatar Feb 14 '24 13:02 intgr

We've merged lots of 5.0 PRs, but haven't kept these checklists up to date.

How do you think we should handle this checklist maintenance?

@sobolevn Is it viable to grant privileges to frequent contributors like q0w and ngnpope such that they can edit the checklists themselves?

intgr avatar Mar 21 '24 11:03 intgr

Is there anybody who is interested in keeping these checklists up to date with merged PRs?

I don't want to take on this additional responsibility myself.

intgr avatar Mar 25 '24 10:03 intgr

This is the current list of tasks I have organized manually. It may be missing some from version 5.0, or include changes from version 4.2.

I think allowlist_todo_django50.txt can also help fill in the missing changes for version 5.0.

(Collapsed original list that is now outdated)

Django 4.2.8 (compare, release notes)

  • [x] django.db.models.sql.query
    • [x] django.db.models.sql.query.Query.resolve_lookup_value's summarize argument was added #2136

Django 5.0 (compare, release notes)

django.conf
  • [x] django.conf.__init__
    • [x] django.conf.USE_DEPRECATED_PYTZ_DEPRECATED_MSG was removed
    • [x] django.conf.USE_L10N_DEPRECATED_MSG was removed
    • [x] django.conf.CSRF_COOKIE_MASKED_DEPRECATED_MSG was removed
    • [x] django.conf.FORMS_URLFIELD_ASSUME_HTTPS_DEPRECATED_MSG was added #2008
  • [x] django.conf.global_settings
    • [x] django.conf.global_settings.USE_DEPRECATED_PYTZ was removed
    • [x] django.conf.global_settings.USE_L10N was removed #1979
    • [x] django.conf.global_settings.FORMS_URLFIELD_ASSUME_HTTPS was added #2008
    • [x] django.conf.global_settings.DATA_UPLOAD_MAX_NUMBER_FILES was added
    • [x] django.conf.global_settings.CSRF_COOKIE_MASKED was removed #2008
django.contrib
  • [x] django.contrib.admin.__init__
    • [x] django.contrib.admin.ShowFacets was added #2004
  • [x] django.contrib.admin.exceptions
    • [x] django.contrib.admin.exceptions.AlreadyRegistered was added #2004
    • [x] django.contrib.admin.exceptions.NotRegistered was added #2004
  • [x] django.contrib.admin.filters
    • [x] django.contrib.admin.filters.ListFilter.request was added #2004
    • [x] django.contrib.admin.filters.FacetsMixin was added #2004
    • [x] django.contrib.admin.filters.SimpleListFilter was changed #2004
    • [x] django.contrib.admin.filters.FieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.RelatedFieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.BooleanFieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.ChoicesFieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.DateFieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.AllValuesFieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.RelatedOnlyFieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.EmptyFieldListFilter was changed #2004
  • [x] django.contrib.admin.helpers
    • [x] django.contrib.admin.helpers.checkbox was removed #1972
  • [x] django.contrib.admin.options
    • [x] django.contrib.admin.options.IS_FACETS_VAR #2004
    • [x] django.contrib.admin.options.ShowFacets was added #1967
    • [x] django.contrib.admin.options.BaseModelAdmin.lookup_allowed's request argument was added #1976
    • [x] django.contrib.admin.options.ModelAdmin.show_facets was added #1967
    • [x] ~django.contrib.admin.options.ModelAdmin._get_preserved_qsl was added~
  • [x] django.contrib.admin.sites
    • [x] django.contrib.admin.sites.AlreadyRegistered was removed #2004
    • [x] django.contrib.admin.sites.NotRegistered was removed #2004
    • [x] django.contrib.admin.sites.AdminSite.get_model_admin was added #2029
    • [x] django.contrib.admin.sites.AdminSite.get_log_entries was added #1963
  • [x] django.contrib.admin.utils
    • [x] django.contrib.admin.utils.get_last_value_from_parameters was added #2004
    • [x] django.contrib.admin.utils.prepare_lookup_value was changed #2004
    • [x] django.contrib.admin.utils.build_q_object_from_lookup_parameters was added #2004
  • [x] django.contrib.admin.views.main
    • [x] django.contrib.admin.views.main.ChangeList.add_facets was added #2079
    • [x] django.contrib.admin.views.main.ChangeList.is_facets_optional was added #2079
    • [x] django.contrib.admin.views.main.ChangeList.filter_params was added #2079
    • [x] django.contrib.admin.views.main.ChangeList.remove_facet_link was added #2079
    • [x] django.contrib.admin.views.main.ChangeList.add_facet_link was added #2079
    • [x] django.contrib.admin.views.main.ChangeList.get_queryset's exclude_parameters argument was added #2004
  • [x] django.contrib.admin.widgets
    • [x] django.contrib.admin.widgets.BaseAdminDateWidget was added #2105
    • [x] django.contrib.admin.widgets.AdminDateWidget was changed #2105
    • [x] django.contrib.admin.widgets.BaseAdminTimeWidget was added #2105
    • [x] django.contrib.admin.widgets.AdminTimeWidget was changed #2105
    • [x] django.contrib.admin.widgets.RelatedFieldWidgetWrapper.choices was added #2105
  • [x] django.contrib.auth.__init__
    • [x] django.contrib.auth.aauthenticate was added #1741
    • [x] django.contrib.auth.alogin was added #1741
    • [x] django.contrib.auth.alogout was added #1741
    • [x] django.contrib.auth.aget_user was added #1741
    • [x] django.contrib.auth.aupdate_session_auth_hash was added #1741
  • [x] django.contrib.auth.admin
    • [x] django.contrib.auth.admin.django.contrib.auth.admin.lookup_allowed's request argument was added #1976
  • [x] django.contrib.auth.backends
    • [x] django.contrib.auth.backends.RemoteUserBackend.configure_user's created argument was added #2111
  • [x] django.contrib.auth.base_user
    • [x] django.contrib.auth.base_user.AbstractBaseUser.acheck_password was added #1741
    • [x] django.contrib.auth.base_user.AbstractBaseUser.get_session_auth_fallback_hash was added #2113
  • [x] django.contrib.auth.hashers
    • [x] django.contrib.auth.hashers.verify_password was added #2009
    • [x] django.contrib.auth.hashers.acheck_password was added #1741
    • [x] django.contrib.auth.hashers.CryptPasswordHasher was removed #2009
  • [x] django.contrib.auth.middleware
    • [x] django.contrib.auth.middleware.auser was added #1966
  • [x] django.contrib.contenttypes.fields
    • [x] django.contrib.contenttypes.fields.GenericForeignKey.get_content_type's model argument was added #2137
    • [x] django.contrib.contenttypes.fields.GenericForeignKey.get_prefetch_querysets was added #2137
  • [x] django.contrib.contenttypes.prefetch
    • [x] django.contrib.contenttypes.prefetch.GenericPrefetch was added #2115
  • [x] django.contrib.gis.admin.__init__
    • [x] django.contrib.gis.admin.GeoModelAdmin was removed #1981
    • [x] django.contrib.gis.admin.OpenLayersWidget was removed #2116
    • [x] django.contrib.gis.admin.OSMGeoAdmin was removed #1981
  • [x] django.contrib.gis.admin.options
    • [x] django.contrib.gis.admin.options.spherical_mercator_srid was removed #2116
    • [x] django.contrib.gis.admin.options.GeoModelAdmin was removed #1981
    • [x] django.contrib.gis.admin.options.OSMGeoAdmin was removed #1981
  • [x] django.contrib.gis.admin.widgets was removed #2116
  • [ ] django.contrib.gis.db.backends.postgis.operations
    • [ ] django.contrib.gis.db.backends.postgis.operations.PostGISOperator.check_geography was added #2138
  • [x] django.contrib.gis.db.backends.spatialite.schema
    • [x] django.contrib.gis.db.backends.spatialite.schema.SpatialiteSchemaEditor.alter_db_table's disable_constraints argument was removed #2123
  • [x] django.contrib.gis.db.models.functions
    • [x] django.contrib.gis.db.models.functions.ClosestPoint was added #1968
  • [x] django.contrib.gis.geos.geometry
    • [x] django.contrib.gis.geos.geometry.GEOSGeometryBase.equals_identical was added #2034
  • [ ] django.contrib.gis.geos.prototypes.__init__
    • [ ] django.contrib.gis.geos.prototypes.geos_equalsidentical was added
  • [ ] django.contrib.gis.geos.prototypes.io
    • [x] django.contrib.gis.geos.prototypes.io.default_trim_value was added #2034
    • [ ] django.contrib.gis.geos.prototypes.io.DEFAULT_TRIM_VALUE was added
  • [x] django.contrib.gis.geos.prototypes.predicates
    • [x] django.contrib.gis.geos.prototypes.predicates.geos_equalsidentical was added #2034
  • [ ] django.contrib.messages.__init__
    • [ ] django.contrib.messages.Message was added
  • [x] django.contrib.messages.storage.cookie
    • [x] django.contrib.messages.storage.cookie.MessagePartSerializer was added #2106
    • [x] django.contrib.messages.storage.cookie.MessagePartGatherSerializer was added #2106
    • [x] django.contrib.messages.storage.cookie.MessageSerializer was changed #2106
    • [x] django.contrib.messages.storage.cookie.CookieStorage.not_finished_json was added #2106
    • [x] django.contrib.messages.storage.cookie.bisect_keep_left was added #2106
    • [x] django.contrib.messages.storage.cookie.bisect_keep_right was added #2106
  • [x] django.contrib.messages.test was added #2126
  • [x] django.contrib.postgres.aggregates.general
    • [x] django.contrib.postgres.aggregates.general.NOT_PROVIDED was removed
    • [x] django.contrib.postgres.aggregates.general.DeprecatedConvertValueMixin was removed
    • [x] django.contrib.postgres.aggregates.general.DeprecatedConvertValueMixin was removed
  • [x] django.contrib.postgres.constraints
    • [x] django.contrib.postgres.constraints.ExclusionConstraint.__init__'s opclasses argument was removed #2078
    • [x] django.contrib.postgres.constraints.ExclusionConstraint.__init__'s violation_error_code argument was added #1969
    • [x] django.contrib.postgres.constraints.ExclusionConstraint.__init__'s violation_error_code argument was added #1969
  • [x] django.contrib.sessions.serializers
    • [x] django.contrib.sessions.serializers.PickleSerializer was removed #2068
  • [x] django.contrib.sitemaps.__init__
    • [x] django.contrib.sitemaps.PING_URL was removed #2076
    • [x] django.contrib.sitemaps.SitemapNotFound was removed #2076
    • [x] django.contrib.sitemaps.ping_google was removed #2076
  • [x] django.contrib.sitemaps.management.commands.ping_google was removed #2076
  • [x] django.contrib.sites.requests
    • [x] django.contrib.sites.requests.RequestSite.save's foce_insert argument now accept Union[bool, Tuple[ModelBase, ...]] #2076
  • [x] django.contrib.staticfiles.checks
    • [x] django.contrib.staticfiles.checks.E005 was added #2076
    • [x] django.contrib.staticfiles.checks.check_storages was added #2076
  • [x] django.contrib.staticfiles.storage
    • [x] django.contrib.staticfiles.storage.HashedFilesMixin.support_js_module_import_aggregation was added #1528
django.core
  • [x] django.core.cache.backends.base
    • [x] django.core.cache.backends.base.memcached_error_chars_re was added #1948
  • [x] django.core.exceptions
    • [x] django.core.exceptions.TooManyFilesSent was added #1774
  • [x] django.core.files.base
    • [x] django.core.files.base.File.open's signature was changed #1949
  • [x] django.core.handlers.asgi
    • [x] django.core.handlers.asgi.get_script_prefix was added #2066
    • [x] django.core.handlers.asgi.ASGIHandler.listen_for_disconnect was added #2066
    • [x] django.core.handlers.asgi.ASGIHandler.run_get_response was added #2066
    • [x] django.core.handlers.asgi.ASGIHandler.get_script_prefix was removed #2066
  • [x] django.core.management.commands.inspectdb
    • [x] django.core.management.commands.inspectdb.Command.normalize_table_name was added #2067
  • [x] django.core.management.commands.optimizemigration was added #2067
  • [x] django.core.management.commands.runserver
    • [x] django.core.management.commands.runserver.Command.on_bind was added #1829
  • [x] django.core.paginator
    • [x] django.core.paginator.Paginator.default_error_messages was added #1946
    • [x] django.core.paginator.Paginator.__init__'s error_messages argument was added #1946
  • [x] django.core.serializers.base
    • [x] django.core.serializers.base.PickleSerializer was removed #2068
  • [x] django.core.servers.basehttp
    • [x] ~django.core.servers.basehttp.ServerHandler.finish_response was added~
    • [x] django.core.servers.basehttp.run's on_bind argument was added #2070
  • [x] django.core.validators
    • [x] django.core.validators.URLValidator.max_length was added #1787
    • [x] django.core.validators.StepValueValidator.__init__ was changed #1947
    • [x] django.core.validators.StepValueValidator.offset was added #1947
django.db
  • [x] django.db.backends.base.base
    • [x] django.db.backends.base.base.timezone_constructor wsa removed #1980
  • [x] django.db.backends.base.features
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.delete_can_self_reference_subquery was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_nulls_distinct_unique_constraints was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_atomic_references_rename was removed #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_expression_defaults was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_default_keyword_in_insert was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_default_keyword_in_bulk_insert was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_stored_generated_columns was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_virtual_generated_columns was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.insert_test_table_with_defaults was added #2099
  • [x] django.db.backends.base.operations
    • [x] django.db.backends.base.operations.BaseDatabaseOperations.prepare_join_on_clause was added #2100
  • [x] django.db.backends.base.schema
    • [x] django.db.backends.base.schema.BaseDatabaseSchemaEditor.db_default_sql was added #1876
  • [ ] django.db.backends.mysql.base
    • [ ] django.db.backends.mysql.base.DatabaseWrapper.data_types was changed
  • [x] django.db.backends.oracle.base
    • [x] django.db.backends.oracle.base.DatabaseWrapper.cx_oracle_version was removed #2057
  • [ ] django.db.backends.oracle.introspection
    • [ ] django.db.backends.oracle.introspection.DatabaseIntrospection.data_types_reverse was changed
  • [ ] django.db.backends.oracle.oracledb_any was added
  • [ ] django.db.backends.postgresql.features was added
    • [ ] django.db.backends.postgresql.features.uses_server_side_binding was added
    • [ ] django.db.backends.postgresql.features.is_postgresql_15 was added
  • [x] django.db.backends.sqlite3.features
    • [x] django.db.backends.sqlite3.features.DatabaseFeatures.can_alter_table_rename_column was removed
  • [x] django.db.backends.utils
    • [x] django.db.backends.utils.CursorWrapper.APPS_NOT_READY_WARNING_MSG was added #2102
  • [x] django.db.migrations.serializer
    • [x] django.db.migrations.serializer.BaseUnorderedSequenceSerializer was added #2109
    • [x] django.db.migrations.serializer.FrozensetSerializer was changed #2109
    • [x] django.db.migrations.serializer.SetSerializer was changed #2109
  • [x] django.db.models.__init__
    • [x] django.db.models.GeneratedField was added #1944
  • [x] django.db.models.base
    • [x] django.db.models.base.Model.save's foce_insert argument now accept Union[bool, Tuple[ModelBase, ...]] #2076
    • [x] django.db.models.base.Model.asave's foce_insert argument now accept Union[bool, Tuple[ModelBase, ...]] #2076
    • [x] django.db.models.base.Model.save_base's foce_insert argument now accept Union[bool, Tuple[ModelBase, ...]] #2076
  • [ ] django.db.models.constraints
    • [x] django.db.models.constraints.BaseConstraint.violation_error_code was added #1969 #1974
    • [x] django.db.models.constraints.BaseConstraint.__init__'s violation_error_code argument was added #1975 #1974
    • [x] django.db.models.constraints.CheckConstraint.__init__'s violation_error_code argument was added #1969
    • [x] django.db.models.constraints.CheckConstraint.__init__'s violation_error_code argument was added #1969
    • [x] django.db.models.constraints.UniqueConstraint.__init__'s nulls_distinct, violation_error_code argument was added #1880
    • [ ] django.db.models.constraints.UniqueConstraint.nulls_distinct was added
  • [x] django.db.models.enums
    • [x] django.db.models.enums.ChoicesType was added #1942
    • [x] django.db.models.enums.IntegerChoices was changed #2148
    • [x] django.db.models.enums.TextChoices was changed #2148
  • [x] django.db.models.expressions
    • [x] django.db.models.expressions.BaseExpression.allowed_default was added #2110
    • [x] django.db.models.expressions.BaseExpression.contains_subquery was added
    • [x] django.db.models.expressions.DatabaseDefault was added #2110
    • [x] django.db.models.expressions.Subquery.subquery was added #2110
  • [ ] django.db.models.fields.__init__
    • [ ] django.db.models.fields.Field.generated was added
    • [x] django.db.models.fields.Field.__init__'s db_default argument was added #1876
    • [x] django.db.models.fields.Field.db_default was added #1876
  • [x] django.db.models.fields.generated
    • [x] django.db.models.fields.generated.GeneratedField was added #1944
  • [ ] django.db.models.fields.related
    • [ ] django.db.models.fields.related.ForeignObject.get_joining_fields was added
    • [ ] django.db.models.fields.related.ForeignObject.get_reverse_joining_fields was added
  • [ ] django/db/models/fields/related_descriptors
    • [ ] django.db.models.fields.related_descriptors.ForwardManyToOneDescriptor.get_prefetch_querysets was added
    • [ ] django.db.models.fields.related_descriptors.ReverseOneToOneDescriptor.get_prefetch_querysets was added
  • [ ] django.db.models.fields.reverse_related
    • [ ] django.db.models.fields.reverse_related.ForeignObjectRel.get_lookups was added
    • [ ] django.db.models.fields.reverse_related.ForeignObjectRel.get_transform was added
    • [ ] django.db.models.fields.reverse_related.ForeignObjectRel.get_joining_fields was added
  • [ ] django.db.models.functions.datetime
    • [ ] django.db.models.functions.datetime.TruncBase.__init__'s is_dst argument was removed
    • [ ] django.db.models.functions.datetime.TruncBase.is_dst was removed
    • [ ] django.db.models.functions.datetime.Trunc.__init__'s is_dst argument was removed
  • [x] django.db.models.lookups
    • [x] django.db.models.lookups.IntegerFieldOverflow was added #2103
    • [x] django.db.models.lookups.IntegerFieldExact was added #2103
    • [x] django.db.models.lookups.IntegerGreaterThan was added #2103
    • [x] django.db.models.lookups.IntegerGreaterThanOrEqual was changed #2103
    • [x] django.db.models.lookups.IntegerLessThan was changed #2103
    • [x] django.db.models.lookups.IntegerLessThanOrEqual was added #2103
  • [ ] django.db.models.query
    • [x] django.db.models.query.QuerySet.update_or_create's create_defaults argument was added #1970
    • [x] django.db.models.query.QuerySet.aupdate_or_create's create_defaults argument was added #1970
    • [ ] django.db.models.query.Prefetch.get_current_querysets was added
    • [x] django.db.models.query.aprefetch_related_objects was added #1741
  • [ ] django.db.models.query_utils
    • [ ] django.db.models.query_utils.Q.identity was added
    • [ ] django.db.models.query_utils.FilteredRelation.path was removed
    • [ ] django.db.models.query_utils.FilteredRelation.relabeled_clone was added
    • [ ] django.db.models.query_utils.FilteredRelation.resolve_expression was added
  • [ ] django.db.models.sql.compiler
    • [ ] django.db.models.sql.compiler.PositionRef was added
  • [ ] django.db.models.sql.datastructures
    • [ ] django.db.models.sql.datastructures.Join.equals was removed
    • [ ] django.db.models.sql.datastructures.BaseTable.equals was removed
  • [ ] django.db.models.sql.query
    • [ ] django.db.models.sql.query.get_paths_from_expression was added
    • [ ] django.db.models.sql.query.get_child_with_renamed_prefix was added
    • [ ] django.db.models.sql.query.rename_prefix_from_q was added
    • [x] django.db.models.sql.query.Query.annotation_select_mask's signature was changed #1973
    • [ ] django.db.models.sql.query.Query.join's reuse_with_filtered_relation argument was removed
    • [ ] django.db.models.sql.query.Query.resolve_lookup_value's summarize argument was added
    • [ ] django.db.models.sql.query.Query.build_filter's reuse_with_filtered_relation argument was removed
    • [ ] django.db.models.sql.query.Query.build_filter's update_join_types argument was added
    • [ ] django.db.models.sql.query.Query.build_filtered_relation_q was removed
  • [ ] Passing nulls_first=False or nulls_last=False to Expression.asc() and Expression.desc() methods, and the OrderBy expression is no longer allowed.
django.dispatch
  • [x] django.dispatch.dispatcher
    • [x] django.dispatch.dispatcher.Signal.asend was added #1965
    • [x] django.dispatch.dispatcher.Signal.asend_robust was added #1965
django.forms
  • [x] django.forms.boundfield
    • [x] django.forms.boundfield.BoundField was changed #2118
    • [x] django.forms.boundfield.BoundField.renderer was added (might be placed in RenderableMixin) #2118
    • [x] django.forms.boundfield.BoundField.template_name was added (might be placed in RenderableMixin) #2118
    • [x] django.forms.boundfield.BoundField.get_context was added (might be placed in RenderableMixin) #2118
  • [ ] django.forms.fields
    • [x] django.forms.fields.Field.__init__'s template_name argument was added #2107
    • [ ] django.forms.fields.Field.template_name was added
    • [x] django.forms.fields.URLField.__init__'s assume_scheme argument was added #1929
    • [ ] django.forms.fields.URLField.assume_scheme was added
    • [x] django.forms.fields.CallableChoiceIterator was removed #2075
  • [x] django.forms.forms
    • [x] django.forms.forms.BaseForm._html_output was removed #2122
  • [x] django.forms.formsets
    • [x] django.forms.formsets.BaseFormSet.form_renderer was added #2145
    • [x] django.forms.formsets.BaseFormSet.renderer was added (might be placed in RenderableMixin) #2145
  • [x] django.forms.models
    • [x] django.forms.models.fields_for_model's form_declared_fields argument was added #2146
    • [x] django.forms.models.save_existing's instance argument was changed to obj #1971
    • [x] django.forms.models.ModelChoiceIterator was changed #2075
  • [x] django.forms.renderers
    • [x] django.forms.renderers.BaseRenderer.field_template_name was added #2119
  • [ ] django.forms.utils
    • [x] django.forms.utils.DEFAULT_TEMPLATE_DEPRECATION_MSG was removed
    • [ ] django.forms.utils.RenderableFieldMixin was added
  • [x] django.forms.widgets
    • [x] django.forms.widgets.FileInput.allow_multiple_selected was added #2147
    • [x] django.forms.widgets.ClearableFileInput.checked was added #2147
django.http
  • [x] django.http.multipartparser
    • [x] django.http.multipartparser.FIELD_TYPES was added #2064
  • [x] django.http.request
    • [x] django.http.request.HttpRequest.auser was added #2064
django.middleware
  • [x] django.middleware.locale
    • [x] django.middleware.locale.LocaleMiddleware.get_fallback_language was removed
django.shortcuts
  • [x] django.shortcuts
    • [x] django.shortcuts.aget_object_or_404 was added #1741
    • [x] django.shortcuts.aget_list_or_404 was added #1741
django.template, django.templatetags
  • [x] django.template.base
    • [x] django.template.base.Template.__iter__ was removed #2063
  • [x] django.template.defaultfilters
    • [x] django.template.defaultfilters.escapeseq was added #2063
  • [x] django.templatetags.tz
    • [x] django.templatetags.tz.UnknownTimezoneException was removed
    • [x] django.templatetags.tz.timezone_constructor was removed
django.test
  • [x] django.test.client
    • [x] django.test.client.REDIRECT_STATUS_CODES was added #2059
    • [x] django.test.client.aclosing_iterator_wrapper was added #2059
    • [x] django.test.client.ClientMixin.asession was added #1741
    • [x] django.test.client.ClientMixin.alogin was added #1741
    • [x] django.test.client.ClientMixin.aforce_login was added #1741
    • [x] django.test.client.ClientMixin.alogout was added #1741
    • [x] django.test.client.AsyncClient.get was added #2005
    • [x] django.test.client.AsyncClient.post was added #2005
    • [x] django.test.client.AsyncClient.head was added #2005
    • [x] django.test.client.AsyncClient.options was added #2005
    • [x] django.test.client.AsyncClient.put was added #2005
    • [x] django.test.client.AsyncClient.patch was added #2005
    • [x] django.test.client.AsyncClient.delete was added #2005
    • [x] django.test.client.AsyncClient.trace was added #2005
  • [x] django.test.html
    • [x] django.test.html.Parser.SELF_CLOSING_TAGS was removed #2060
  • [x] django.test.runner
    • [x] django.test.runner.RemoteTestResult.addDuration was added #2005
    • [x] django.test.runner.ParallelTestSuite.used_aliases was added #2061
    • [x] django.test.runner.DiscoverRunner.__init__'s durations argument was added #2005
    • [x] django.test.runner.DiscoverRunner.build_suite's extra_tests argument was removed #1978
    • [x] django.test.runner.DiscoverRunner.run_tests's extra_tests argument was removed #1978
  • [x] django.test.testcases
    • [x] django.test.testcases.SimpleTestCase.assertFormError's signature was changed (response and form/formset name) #2062
    • [x] django.test.testcases.SimpleTestCase.assertFormSetError's signature was changed (response and form/formset name) #2062
    • [x] django.test.testcases._AssertTemplateUsedContext.rendered_template_names was removed #2062
    • [x] django.test.testcases._AssertFormErrorDeprecationHelper was removed
django.utils
  • [x] django.utils.baseconv was removed #1977
  • [x] django.utils.choices was added
    • [x] django.utils.choices.BaseChoiceIterator was added #2075
    • [x] django.utils.choices.BlankChoiceIterator was added #2075
    • [x] django.utils.choices.CallableChoiceIterator was added #2075
    • [x] django.utils.choices.flatten_choices was added #2075
    • [x] django.utils.choices.normalize_choices was added #2075
  • [x] django.utils.crypto
    • [x] django.utils.crypto.md5 was removed
    • [x] django.utils.crypto.new_hash was removed
  • [x] django.utils.datetime_safe was removed #1977
  • [x] django.utils.deprecation
    • [x] django.utils.deprecation.RemovedInDjango50Warning was removed #2006
    • [x] django.utils.deprecation.RemovedInDjango60Warning was added #2006
    • [x] django.utils.deprecation.RemovedInNextVersionWarning was changed #2006
    • [x] django.utils.deprecation.RemovedAfterNextVersionWarning was changed #2006
  • [x] django.utils.html
    • [x] django.utils.html.VOID_ELEMENTS was added #2006
  • [x] django.utils.text
    • [x] django.utils.text.add_truncation_text was added #2006
    • [x] django.utils.text.Truncator.MAX_LENGTH_HTML was added
    • [x] django.utils.text.Truncator.add_truncation_text was removed
  • [x] django.utils.timezone
    • [x] django.utils.timezone.NOT_PASSED was removed
    • [x] django.utils.timezone.utc (alias) was removed
    • [x] django.utils.timezone.make_aware's argument is_dst was removed #2006
    • [x] django.utils.timezone._is_pytz_zone was removed #1980
  • [x] django.utils.topological_sort was removed #2006
  • [x] django.utils.translation.trans_real
    • [x] django.utils.translation.trans_real.ACCEPT_LANGUAGE_HEADER_MAX_LENGTH was added
  • [x] django.utils.version
    • [x] django.utils.version.PY312 was added
django.views
  • [x] django.views.csrf
    • [x] django.views.csrf.CSRF_FAILURE_TEMPLATE was removed #2007
    • [x] django.views.csrf.builtin_template_path was added #2007
  • [x] django.views.decorators.debug
    • [x] django.views.decorators.debug.coroutine_functions_to_sensitive_variables was added #2007
  • [x] django.views.generic.edit
    • [x] django.views.generic.edit.DeleteViewCustomDeleteWarning was removed #2007
    • [x] django.views.generic.edit.BaseDeleteView.__init__ was removed #2007
  • [x] django.views.i18n
    • [x] django.views.i18n.builtin_template_path was added #2007
    • [x] django.views.i18n.js_catalog_template was removed #2007
  • [x] django.views.static
    • [x] django.views.static.builtin_template_path was added #2007
    • [x] django.views.static.DEFAULT_DIRECTORY_INDEX_TEMPLATE was removed #2007

Django 5.0.1 (compare, release notes)

  • [x] django.db.backends.oracle.base
    • [x] django.db.backends.oracle.base.FormatStylePlaceholderCursor.__init__'s database argument was added #2057

Django 5.0.2 (compare, release notes)

  • [ ] django.db.models.sql.query
    • [ ] django.db.models.sql.query.get_child_with_renamed_prefix's child argument was changed

Django 5.0.3 (compare, release notes)

  • [x] django.utils.text
    • [x] django.utils.text.re_notag was added #1990
    • [x] django.utils.text.re_prt was added #1990
    • [x] django.utils.text.WordsRegex was added #1990
    • [x] django.utils.text.FakeMatch was added #1990
    • [x] django.utils.text.re_words was changed #1990

Django 5.0.4 (compare, release notes)

No interface changes.

Django 5.0.5 e696331 (compare, release notes)

No interface changes.

sudosubin avatar Apr 13 '24 15:04 sudosubin

@sudosubin I just checked while working on the above answer. Sorry if I worked on what you were working on. I'll help you contribute to the list you made.

JaeHyuckSa avatar Apr 30 '24 14:04 JaeHyuckSa

We've merged lots of 5.0 PRs, but haven't kept these checklists up to date.

How do you think we should handle this checklist maintenance?

@sobolevn Is it viable to grant privileges to frequent contributors like q0w and ngnpope such that they can edit the checklists themselves?

@sobolevn Could you give me permission to update the checklist temporarily? I need it because I got confused checking while I was working on it.

JaeHyuckSa avatar May 09 '24 05:05 JaeHyuckSa

@saJaeHyukc Feel free to copy & paste the whole checklist to a new comment, and I will edit the previous comment to collapse it.

Here's the Markdown content of the last checklist: https://gist.github.com/intgr/126c9e366170e671e1bc6d12a2bc575a

intgr avatar May 09 '24 10:05 intgr

This is a list created by @sudosubin.

This is the current list of tasks I have organized manually. It may be missing some from version 5.0, or include changes from version 4.2.

I think allowlist_todo_django50.txt can also help fill in the missing changes for version 5.0.

Django 4.2.8 (compare, release notes)

  • [x] django.db.models.sql.query
    • [x] django.db.models.sql.query.Query.resolve_lookup_value's summarize argument was added #2136

Django 5.0 (compare, release notes)

django.conf
  • [x] django.conf.__init__
    • [x] django.conf.USE_DEPRECATED_PYTZ_DEPRECATED_MSG was removed
    • [x] django.conf.USE_L10N_DEPRECATED_MSG was removed
    • [x] django.conf.CSRF_COOKIE_MASKED_DEPRECATED_MSG was removed
    • [x] django.conf.FORMS_URLFIELD_ASSUME_HTTPS_DEPRECATED_MSG was added #2008
  • [x] django.conf.global_settings
    • [x] django.conf.global_settings.USE_DEPRECATED_PYTZ was removed
    • [x] django.conf.global_settings.USE_L10N was removed #1979
    • [x] django.conf.global_settings.FORMS_URLFIELD_ASSUME_HTTPS was added #2008
    • [x] django.conf.global_settings.DATA_UPLOAD_MAX_NUMBER_FILES was added
    • [x] django.conf.global_settings.CSRF_COOKIE_MASKED was removed #2008
django.contrib
  • [x] django.contrib.admin.__init__
    • [x] django.contrib.admin.ShowFacets was added #2004
  • [x] django.contrib.admin.exceptions
    • [x] django.contrib.admin.exceptions.AlreadyRegistered was added #2004
    • [x] django.contrib.admin.exceptions.NotRegistered was added #2004
  • [x] django.contrib.admin.filters
    • [x] django.contrib.admin.filters.ListFilter.request was added #2004
    • [x] django.contrib.admin.filters.FacetsMixin was added #2004
    • [x] django.contrib.admin.filters.SimpleListFilter was changed #2004
    • [x] django.contrib.admin.filters.FieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.RelatedFieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.BooleanFieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.ChoicesFieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.DateFieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.AllValuesFieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.RelatedOnlyFieldListFilter was changed #2004
    • [x] django.contrib.admin.filters.EmptyFieldListFilter was changed #2004
  • [x] django.contrib.admin.helpers
    • [x] django.contrib.admin.helpers.checkbox was removed #1972
  • [x] django.contrib.admin.options
    • [x] django.contrib.admin.options.IS_FACETS_VAR #2004
    • [x] django.contrib.admin.options.ShowFacets was added #1967
    • [x] django.contrib.admin.options.BaseModelAdmin.lookup_allowed's request argument was added #1976
    • [x] django.contrib.admin.options.ModelAdmin.show_facets was added #1967
    • [x] ~django.contrib.admin.options.ModelAdmin._get_preserved_qsl was added~
  • [x] django.contrib.admin.sites
    • [x] django.contrib.admin.sites.AlreadyRegistered was removed #2004
    • [x] django.contrib.admin.sites.NotRegistered was removed #2004
    • [x] django.contrib.admin.sites.AdminSite.get_model_admin was added #2029
    • [x] django.contrib.admin.sites.AdminSite.get_log_entries was added #1963
  • [x] django.contrib.admin.utils
    • [x] django.contrib.admin.utils.get_last_value_from_parameters was added #2004
    • [x] django.contrib.admin.utils.prepare_lookup_value was changed #2004
    • [x] django.contrib.admin.utils.build_q_object_from_lookup_parameters was added #2004
  • [x] django.contrib.admin.views.main
    • [x] django.contrib.admin.views.main.ChangeList.add_facets was added #2079
    • [x] django.contrib.admin.views.main.ChangeList.is_facets_optional was added #2079
    • [x] django.contrib.admin.views.main.ChangeList.filter_params was added #2079
    • [x] django.contrib.admin.views.main.ChangeList.remove_facet_link was added #2079
    • [x] django.contrib.admin.views.main.ChangeList.add_facet_link was added #2079
    • [x] django.contrib.admin.views.main.ChangeList.get_queryset's exclude_parameters argument was added #2004
  • [x] django.contrib.admin.widgets
    • [x] django.contrib.admin.widgets.BaseAdminDateWidget was added #2105
    • [x] django.contrib.admin.widgets.AdminDateWidget was changed #2105
    • [x] django.contrib.admin.widgets.BaseAdminTimeWidget was added #2105
    • [x] django.contrib.admin.widgets.AdminTimeWidget was changed #2105
    • [x] django.contrib.admin.widgets.RelatedFieldWidgetWrapper.choices was added #2105
  • [x] django.contrib.auth.__init__
    • [x] django.contrib.auth.aauthenticate was added #1741
    • [x] django.contrib.auth.alogin was added #1741
    • [x] django.contrib.auth.alogout was added #1741
    • [x] django.contrib.auth.aget_user was added #1741
    • [x] django.contrib.auth.aupdate_session_auth_hash was added #1741
  • [x] django.contrib.auth.admin
    • [x] django.contrib.auth.admin.django.contrib.auth.admin.lookup_allowed's request argument was added #1976
  • [x] django.contrib.auth.backends
    • [x] django.contrib.auth.backends.RemoteUserBackend.configure_user's created argument was added #2111
  • [x] django.contrib.auth.base_user
    • [x] django.contrib.auth.base_user.AbstractBaseUser.acheck_password was added #1741
    • [x] django.contrib.auth.base_user.AbstractBaseUser.get_session_auth_fallback_hash was added #2113
  • [x] django.contrib.auth.hashers
    • [x] django.contrib.auth.hashers.verify_password was added #2009
    • [x] django.contrib.auth.hashers.acheck_password was added #1741
    • [x] django.contrib.auth.hashers.CryptPasswordHasher was removed #2009
  • [x] django.contrib.auth.middleware
    • [x] django.contrib.auth.middleware.auser was added #1966
  • [x] django.contrib.contenttypes.fields
    • [x] django.contrib.contenttypes.fields.GenericForeignKey.get_content_type's model argument was added #2137
    • [x] django.contrib.contenttypes.fields.GenericForeignKey.get_prefetch_querysets was added #2137
  • [x] django.contrib.contenttypes.prefetch
    • [x] django.contrib.contenttypes.prefetch.GenericPrefetch was added #2115
  • [x] django.contrib.gis.admin.__init__
    • [x] django.contrib.gis.admin.GeoModelAdmin was removed #1981
    • [x] django.contrib.gis.admin.OpenLayersWidget was removed #2116
    • [x] django.contrib.gis.admin.OSMGeoAdmin was removed #1981
  • [x] django.contrib.gis.admin.options
    • [x] django.contrib.gis.admin.options.spherical_mercator_srid was removed #2116
    • [x] django.contrib.gis.admin.options.GeoModelAdmin was removed #1981
    • [x] django.contrib.gis.admin.options.OSMGeoAdmin was removed #1981
  • [x] django.contrib.gis.admin.widgets was removed #2116
  • [x] django.contrib.gis.db.backends.postgis.operations
    • [x] django.contrib.gis.db.backends.postgis.operations.PostGISOperator.check_geography was added #2138
  • [x] django.contrib.gis.db.backends.spatialite.schema
    • [x] django.contrib.gis.db.backends.spatialite.schema.SpatialiteSchemaEditor.alter_db_table's disable_constraints argument was removed #2123
  • [x] django.contrib.gis.db.models.functions
    • [x] django.contrib.gis.db.models.functions.ClosestPoint was added #1968
  • [x] django.contrib.gis.geos.geometry
    • [x] django.contrib.gis.geos.geometry.GEOSGeometryBase.equals_identical was added #2034
  • [x] django.contrib.gis.geos.prototypes.__init__
    • [x] django.contrib.gis.geos.prototypes.geos_equalsidentical was added #2034
  • [ ] django.contrib.gis.geos.prototypes.io
    • [x] django.contrib.gis.geos.prototypes.io.default_trim_value was added #2034
    • [ ] django.contrib.gis.geos.prototypes.io.DEFAULT_TRIM_VALUE was added
  • [x] django.contrib.gis.geos.prototypes.predicates
    • [x] django.contrib.gis.geos.prototypes.predicates.geos_equalsidentical was added #2034
  • [ ] django.contrib.messages.__init__
    • [ ] django.contrib.messages.Message was added
  • [x] django.contrib.messages.storage.cookie
    • [x] django.contrib.messages.storage.cookie.MessagePartSerializer was added #2106
    • [x] django.contrib.messages.storage.cookie.MessagePartGatherSerializer was added #2106
    • [x] django.contrib.messages.storage.cookie.MessageSerializer was changed #2106
    • [x] django.contrib.messages.storage.cookie.CookieStorage.not_finished_json was added #2106
    • [x] django.contrib.messages.storage.cookie.bisect_keep_left was added #2106
    • [x] django.contrib.messages.storage.cookie.bisect_keep_right was added #2106
  • [x] django.contrib.messages.test was added #2126
  • [x] django.contrib.postgres.aggregates.general
    • [x] django.contrib.postgres.aggregates.general.NOT_PROVIDED was removed
    • [x] django.contrib.postgres.aggregates.general.DeprecatedConvertValueMixin was removed
    • [x] django.contrib.postgres.aggregates.general.DeprecatedConvertValueMixin was removed
  • [x] django.contrib.postgres.constraints
    • [x] django.contrib.postgres.constraints.ExclusionConstraint.__init__'s opclasses argument was removed #2078
    • [x] django.contrib.postgres.constraints.ExclusionConstraint.__init__'s violation_error_code argument was added #1969
    • [x] django.contrib.postgres.constraints.ExclusionConstraint.__init__'s violation_error_code argument was added #1969
  • [x] django.contrib.sessions.serializers
    • [x] django.contrib.sessions.serializers.PickleSerializer was removed #2068
  • [x] django.contrib.sitemaps.__init__
    • [x] django.contrib.sitemaps.PING_URL was removed #2076
    • [x] django.contrib.sitemaps.SitemapNotFound was removed #2076
    • [x] django.contrib.sitemaps.ping_google was removed #2076
  • [x] django.contrib.sitemaps.management.commands.ping_google was removed #2076
  • [x] django.contrib.sites.requests
    • [x] django.contrib.sites.requests.RequestSite.save's foce_insert argument now accept Union[bool, Tuple[ModelBase, ...]] #2076
  • [x] django.contrib.staticfiles.checks
    • [x] django.contrib.staticfiles.checks.E005 was added #2076
    • [x] django.contrib.staticfiles.checks.check_storages was added #2076
  • [x] django.contrib.staticfiles.storage
    • [x] django.contrib.staticfiles.storage.HashedFilesMixin.support_js_module_import_aggregation was added #1528
django.core
  • [x] django.core.cache.backends.base
    • [x] django.core.cache.backends.base.memcached_error_chars_re was added #1948
  • [x] django.core.exceptions
    • [x] django.core.exceptions.TooManyFilesSent was added #1774
  • [x] django.core.files.base
    • [x] django.core.files.base.File.open's signature was changed #1949
  • [x] django.core.handlers.asgi
    • [x] django.core.handlers.asgi.get_script_prefix was added #2066
    • [x] django.core.handlers.asgi.ASGIHandler.listen_for_disconnect was added #2066
    • [x] django.core.handlers.asgi.ASGIHandler.run_get_response was added #2066
    • [x] django.core.handlers.asgi.ASGIHandler.get_script_prefix was removed #2066
  • [x] django.core.management.commands.inspectdb
    • [x] django.core.management.commands.inspectdb.Command.normalize_table_name was added #2067
  • [x] django.core.management.commands.optimizemigration was added #2067
  • [x] django.core.management.commands.runserver
    • [x] django.core.management.commands.runserver.Command.on_bind was added #1829
  • [x] django.core.paginator
    • [x] django.core.paginator.Paginator.default_error_messages was added #1946
    • [x] django.core.paginator.Paginator.__init__'s error_messages argument was added #1946
  • [x] django.core.serializers.base
    • [x] django.core.serializers.base.PickleSerializer was removed #2068
  • [x] django.core.servers.basehttp
    • [x] ~django.core.servers.basehttp.ServerHandler.finish_response was added~
    • [x] django.core.servers.basehttp.run's on_bind argument was added #2070
  • [x] django.core.validators
    • [x] django.core.validators.URLValidator.max_length was added #1787
    • [x] django.core.validators.StepValueValidator.__init__ was changed #1947
    • [x] django.core.validators.StepValueValidator.offset was added #1947
django.db
  • [x] django.db.backends.base.base

    • [x] django.db.backends.base.base.timezone_constructor wsa removed #1980
  • [x] django.db.backends.base.features

    • [x] django.db.backends.base.features.BaseDatabaseFeatures.delete_can_self_reference_subquery was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_nulls_distinct_unique_constraints was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_atomic_references_rename was removed #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_expression_defaults was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_default_keyword_in_insert was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_default_keyword_in_bulk_insert was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_stored_generated_columns was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.supports_virtual_generated_columns was added #2099
    • [x] django.db.backends.base.features.BaseDatabaseFeatures.insert_test_table_with_defaults was added #2099
  • [x] django.db.backends.base.operations

    • [x] django.db.backends.base.operations.BaseDatabaseOperations.prepare_join_on_clause was added #2100
  • [x] django.db.backends.base.schema

    • [x] django.db.backends.base.schema.BaseDatabaseSchemaEditor.db_default_sql was added #1876
  • [ ] django.db.backends.mysql.base

    • [ ] django.db.backends.mysql.base.DatabaseWrapper.data_types was changed #2125
  • [x] django.db.backends.oracle.base

    • [x] django.db.backends.oracle.base.DatabaseWrapper.cx_oracle_version was removed #2057
  • [ ] django.db.backends.oracle.introspection

    • [ ] django.db.backends.oracle.introspection.DatabaseIntrospection.data_types_reverse was changed
  • [ ] django.db.backends.oracle.oracledb_any was added

  • [ ] django.db.backends.postgresql.features was added

    • [ ] django.db.backends.postgresql.features.uses_server_side_binding was added
    • [ ] django.db.backends.postgresql.features.is_postgresql_15 was added
  • [x] django.db.backends.sqlite3.features

    • [x] django.db.backends.sqlite3.features.DatabaseFeatures.can_alter_table_rename_column was removed
  • [x] django.db.backends.utils

    • [x] django.db.backends.utils.CursorWrapper.APPS_NOT_READY_WARNING_MSG was added #2102
  • [x] django.db.migrations.serializer

    • [x] django.db.migrations.serializer.BaseUnorderedSequenceSerializer was added #2109
    • [x] django.db.migrations.serializer.FrozensetSerializer was changed #2109
    • [x] django.db.migrations.serializer.SetSerializer was changed #2109
  • [x] django.db.models.__init__

    • [x] django.db.models.GeneratedField was added #1944
  • [x] django.db.models.base

    • [x] django.db.models.base.Model.save's foce_insert argument now accept Union[bool, Tuple[ModelBase, ...]] #2076
    • [x] django.db.models.base.Model.asave's foce_insert argument now accept Union[bool, Tuple[ModelBase, ...]] #2076
    • [x] django.db.models.base.Model.save_base's foce_insert argument now accept Union[bool, Tuple[ModelBase, ...]] #2076
  • [x] django.db.models.constraints

    • [x] django.db.models.constraints.BaseConstraint.violation_error_code was added #1969 #1974
    • [x] django.db.models.constraints.BaseConstraint.__init__'s violation_error_code argument was added #1975 #1974
    • [x] django.db.models.constraints.CheckConstraint.__init__'s violation_error_code argument was added #1969
    • [x] django.db.models.constraints.CheckConstraint.__init__'s violation_error_code argument was added #1969
    • [x] django.db.models.constraints.UniqueConstraint.__init__'s nulls_distinct, violation_error_code argument was added #1880
    • [x] django.db.models.constraints.UniqueConstraint.nulls_distinct was added #2175
  • [x] django.db.models.enums

    • [x] django.db.models.enums.ChoicesType was added #1942
    • [x] django.db.models.enums.IntegerChoices was changed #2148
    • [x] django.db.models.enums.TextChoices was changed #2148
  • [x] django.db.models.expressions

    • [x] django.db.models.expressions.BaseExpression.allowed_default was added #2110
    • [x] django.db.models.expressions.BaseExpression.contains_subquery was added
    • [x] django.db.models.expressions.DatabaseDefault was added #2110
    • [x] django.db.models.expressions.Subquery.subquery was added #2110
  • [x] django.db.models.fields.__init__

    • [x] django.db.models.fields.Field.generated was added #2152
    • [x] django.db.models.fields.Field.__init__'s db_default argument was added #1876
    • [x] django.db.models.fields.Field.db_default was added #1876
  • [x] django.db.models.fields.generated

    • [x] django.db.models.fields.generated.GeneratedField was added #1944
  • [x] django.db.models.fields.related

    • [x] django.db.models.fields.related.ForeignObject.get_joining_fields was added #2151
    • [x] django.db.models.fields.related.ForeignObject.get_reverse_joining_fields was added #2151
  • [x] django.db.models.fields.related_descriptors

    • [x] django.db.models.fields.related_descriptors.ForwardManyToOneDescriptor.get_prefetch_querysets was added #2157
    • [x] django.db.models.fields.related_descriptors.ReverseOneToOneDescriptor.get_prefetch_querysets was added #2157
  • [x] django.db.models.fields.reverse_related

    • [x] django.db.models.fields.reverse_related.ForeignObjectRel.get_lookups was added #2158
    • [x] django.db.models.fields.reverse_related.ForeignObjectRel.get_transform was added #2158
    • [x] django.db.models.fields.reverse_related.ForeignObjectRel.get_joining_fields was added #2158
  • [x] django.db.models.functions.datetime

    • [x] django.db.models.functions.datetime.Now.as_oracle was added #2173
    • [x] django.db.models.functions.datetime.TruncBase.__init__'s is_dst argument was removed #2167
    • [x] django.db.models.functions.datetime.TruncBase.is_dst was removed #2167
    • [x] django.db.models.functions.datetime.Trunc.__init__'s is_dst argument was removed #2167
  • [x] django.db.models.lookups

    • [x] django.db.models.lookups.IntegerFieldOverflow was added #2103
    • [x] django.db.models.lookups.IntegerFieldExact was added #2103
    • [x] django.db.models.lookups.IntegerGreaterThan was added #2103
    • [x] django.db.models.lookups.IntegerGreaterThanOrEqual was changed #2103
    • [x] django.db.models.lookups.IntegerLessThan was changed #2103
    • [x] django.db.models.lookups.IntegerLessThanOrEqual was added #2103
  • [x] django.db.models.query

    • [x] django.db.models.query.QuerySet.update_or_create's create_defaults argument was added #1970
    • [x] django.db.models.query.QuerySet.aupdate_or_create's create_defaults argument was added #1970
    • [x] django.db.models.query.Prefetch.get_current_querysets was added #2160
    • [x] django.db.models.query.aprefetch_related_objects was added #1741
  • [x] django.db.models.query_utils

    • [x] django.db.models.query_utils.Q.identity was added #2165
    • [x] django.db.models.query_utils.FilteredRelation.path was removed #2165
    • [x] django.db.models.query_utils.FilteredRelation.relabeled_clone was added #2165
    • [x] django.db.models.query_utils.FilteredRelation.resolve_expression was added #2165
  • [x] django.db.models.sql.compiler

    • [x] django.db.models.sql.compiler.PositionRef was added #2166
  • [x] django.db.models.sql.datastructures

    • [x] django.db.models.sql.datastructures.Join.equals was removed #2159
    • [x] django.db.models.sql.datastructures.BaseTable.equals was removed #2159
  • [ ] django.db.models.sql.query

    • [ ] django.db.models.sql.query.get_paths_from_expression was added
    • [ ] django.db.models.sql.query.get_child_with_renamed_prefix was added
    • [ ] django.db.models.sql.query.rename_prefix_from_q was added
    • [x] django.db.models.sql.query.Query.annotation_select_mask's signature was changed #1973
    • [x] django.db.models.sql.query.Query.join's reuse_with_filtered_relation argument was removed #2172
    • [x] django.db.models.sql.query.Query.resolve_lookup_value's summarize argument was added #2136
    • [x] django.db.models.sql.query.Query.build_filter's reuse_with_filtered_relation argument was removed #2172
    • [x] django.db.models.sql.query.Query.build_filter's update_join_types argument was added #2172
    • [x] django.db.models.sql.query.Query.build_filtered_relation_q was removed #2172
    • [x] django.db.models.sql.query.Query.setup_joins was removed #2172
  • [ ] Passing nulls_first=False or nulls_last=False to Expression.asc() and Expression.desc() methods, and the OrderBy expression is no longer allowed.

django.dispatch
  • [x] django.dispatch.dispatcher
    • [x] django.dispatch.dispatcher.Signal.asend was added #1965
    • [x] django.dispatch.dispatcher.Signal.asend_robust was added #1965
django.forms
  • [x] django.forms.boundfield
    • [x] django.forms.boundfield.BoundField was changed #2118
    • [x] django.forms.boundfield.BoundField.renderer was added (might be placed in RenderableMixin) #2118
    • [x] django.forms.boundfield.BoundField.template_name was added (might be placed in RenderableMixin) #2118
    • [x] django.forms.boundfield.BoundField.get_context was added (might be placed in RenderableMixin) #2118
  • [ ] django.forms.fields
    • [x] django.forms.fields.Field.__init__'s template_name argument was added #2107
    • [ ] django.forms.fields.Field.template_name was added
    • [x] django.forms.fields.URLField.__init__'s assume_scheme argument was added #1929
    • [ ] django.forms.fields.URLField.assume_scheme was added
    • [x] django.forms.fields.CallableChoiceIterator was removed #2075
  • [x] django.forms.forms
    • [x] django.forms.forms.BaseForm._html_output was removed #2122
  • [x] django.forms.formsets
    • [x] django.forms.formsets.BaseFormSet.form_renderer was added #2145
    • [x] django.forms.formsets.BaseFormSet.renderer was added (might be placed in RenderableMixin) #2145
  • [x] django.forms.models
    • [x] django.forms.models.fields_for_model's form_declared_fields argument was added #2146
    • [x] django.forms.models.save_existing's instance argument was changed to obj #1971
    • [x] django.forms.models.ModelChoiceIterator was changed #2075
  • [x] django.forms.renderers
    • [x] django.forms.renderers.BaseRenderer.field_template_name was added #2119
  • [x] django.forms.utils
    • [x] django.forms.utils.DEFAULT_TEMPLATE_DEPRECATION_MSG was removed
    • [x] django.forms.utils.RenderableFieldMixin was added #2118
  • [x] django.forms.widgets
    • [x] django.forms.widgets.FileInput.allow_multiple_selected was added #2147
    • [x] django.forms.widgets.ClearableFileInput.checked was added #2147
django.http
  • [x] django.http.multipartparser
    • [x] django.http.multipartparser.FIELD_TYPES was added #2064
  • [x] django.http.request
    • [x] django.http.request.HttpRequest.auser was added #2064
django.middleware
  • [x] django.middleware.locale
    • [x] django.middleware.locale.LocaleMiddleware.get_fallback_language was removed
django.shortcuts
  • [x] django.shortcuts
    • [x] django.shortcuts.aget_object_or_404 was added #1741
    • [x] django.shortcuts.aget_list_or_404 was added #1741
django.template, django.templatetags
  • [x] django.template.base
    • [x] django.template.base.Template.__iter__ was removed #2063
  • [x] django.template.defaultfilters
    • [x] django.template.defaultfilters.escapeseq was added #2063
  • [x] django.templatetags.tz
    • [x] django.templatetags.tz.UnknownTimezoneException was removed
    • [x] django.templatetags.tz.timezone_constructor was removed
django.test
  • [x] django.test.client
    • [x] django.test.client.REDIRECT_STATUS_CODES was added #2059
    • [x] django.test.client.aclosing_iterator_wrapper was added #2059
    • [x] django.test.client.ClientMixin.asession was added #1741
    • [x] django.test.client.ClientMixin.alogin was added #1741
    • [x] django.test.client.ClientMixin.aforce_login was added #1741
    • [x] django.test.client.ClientMixin.alogout was added #1741
    • [x] django.test.client.AsyncClient.get was added #2005
    • [x] django.test.client.AsyncClient.post was added #2005
    • [x] django.test.client.AsyncClient.head was added #2005
    • [x] django.test.client.AsyncClient.options was added #2005
    • [x] django.test.client.AsyncClient.put was added #2005
    • [x] django.test.client.AsyncClient.patch was added #2005
    • [x] django.test.client.AsyncClient.delete was added #2005
    • [x] django.test.client.AsyncClient.trace was added #2005
  • [x] django.test.html
    • [x] django.test.html.Parser.SELF_CLOSING_TAGS was removed #2060
  • [x] django.test.runner
    • [x] django.test.runner.RemoteTestResult.addDuration was added #2005
    • [x] django.test.runner.ParallelTestSuite.used_aliases was added #2061
    • [x] django.test.runner.DiscoverRunner.__init__'s durations argument was added #2005
    • [x] django.test.runner.DiscoverRunner.build_suite's extra_tests argument was removed #1978
    • [x] django.test.runner.DiscoverRunner.run_tests's extra_tests argument was removed #1978
  • [x] django.test.testcases
    • [x] django.test.testcases.SimpleTestCase.assertFormError's signature was changed (response and form/formset name) #2062
    • [x] django.test.testcases.SimpleTestCase.assertFormSetError's signature was changed (response and form/formset name) #2062
    • [x] django.test.testcases._AssertTemplateUsedContext.rendered_template_names was removed #2062
    • [x] django.test.testcases._AssertFormErrorDeprecationHelper was removed
django.utils
  • [x] django.utils.baseconv was removed #1977
  • [x] django.utils.choices was added
    • [x] django.utils.choices.BaseChoiceIterator was added #2075
    • [x] django.utils.choices.BlankChoiceIterator was added #2075
    • [x] django.utils.choices.CallableChoiceIterator was added #2075
    • [x] django.utils.choices.flatten_choices was added #2075
    • [x] django.utils.choices.normalize_choices was added #2075
  • [x] django.utils.crypto
    • [x] django.utils.crypto.md5 was removed
    • [x] django.utils.crypto.new_hash was removed
  • [x] django.utils.datetime_safe was removed #1977
  • [x] django.utils.deprecation
    • [x] django.utils.deprecation.RemovedInDjango50Warning was removed #2006
    • [x] django.utils.deprecation.RemovedInDjango60Warning was added #2006
    • [x] django.utils.deprecation.RemovedInNextVersionWarning was changed #2006
    • [x] django.utils.deprecation.RemovedAfterNextVersionWarning was changed #2006
  • [x] django.utils.html
    • [x] django.utils.html.VOID_ELEMENTS was added #2006
  • [x] django.utils.text
    • [x] django.utils.text.add_truncation_text was added #2006
    • [x] django.utils.text.Truncator.MAX_LENGTH_HTML was added
    • [x] django.utils.text.Truncator.add_truncation_text was removed
  • [x] django.utils.timezone
    • [x] django.utils.timezone.NOT_PASSED was removed
    • [x] django.utils.timezone.utc (alias) was removed
    • [x] django.utils.timezone.make_aware's argument is_dst was removed #2006
    • [x] django.utils.timezone._is_pytz_zone was removed #1980
  • [x] django.utils.topological_sort was removed #2006
  • [x] django.utils.translation.trans_real
    • [x] django.utils.translation.trans_real.ACCEPT_LANGUAGE_HEADER_MAX_LENGTH was added
  • [x] django.utils.version
    • [x] django.utils.version.PY312 was added
django.views
  • [x] django.views.csrf
    • [x] django.views.csrf.CSRF_FAILURE_TEMPLATE was removed #2007
    • [x] django.views.csrf.builtin_template_path was added #2007
  • [x] django.views.decorators.debug
    • [x] django.views.decorators.debug.coroutine_functions_to_sensitive_variables was added #2007
  • [x] django.views.generic.edit
    • [x] django.views.generic.edit.DeleteViewCustomDeleteWarning was removed #2007
    • [x] django.views.generic.edit.BaseDeleteView.__init__ was removed #2007
  • [x] django.views.i18n
    • [x] django.views.i18n.builtin_template_path was added #2007
    • [x] django.views.i18n.js_catalog_template was removed #2007
  • [x] django.views.static
    • [x] django.views.static.builtin_template_path was added #2007
    • [x] django.views.static.DEFAULT_DIRECTORY_INDEX_TEMPLATE was removed #2007

Django 5.0.1 (compare, release notes)

  • [x] django.db.backends.oracle.base
    • [x] django.db.backends.oracle.base.FormatStylePlaceholderCursor.__init__'s database argument was added #2057

Django 5.0.2 (compare, release notes)

  • [ ] django.db.models.sql.query
    • [ ] django.db.models.sql.query.get_child_with_renamed_prefix's child argument was changed

Django 5.0.3 (compare, release notes)

  • [x] django.utils.text
    • [x] django.utils.text.re_notag was added #1990
    • [x] django.utils.text.re_prt was added #1990
    • [x] django.utils.text.WordsRegex was added #1990
    • [x] django.utils.text.FakeMatch was added #1990
    • [x] django.utils.text.re_words was changed #1990

Django 5.0.4 (compare, release notes)

No interface changes.

Django 5.0.5 e696331 (compare, release notes)

No interface changes.

Django 5.0.6 (compare, release notes)

No interface changes.

JaeHyuckSa avatar May 11 '24 12:05 JaeHyuckSa