Upgrading Django 4 to 5
Unknown4.2.30 → 5.2.18Security52
SecurityHigh · CVSS 8.8Django GeoDjango spatial lookups allow file writes and outbound requests through GDAL raster parsingGHSA-wvqv-fj8w-qmhm · CVE-2026-15307 ↗
UnknownUpgrade verdict
None of the 59 releases in this range publish notes, so breaking changes can't be ruled out.
In plain terms
- Some releases in this range publish no notes, so DepDelta can't rule out breaking changes.
- Their commits are listed with this comparison.
Must act Top 3 of 52 that need code or config changes
Python requirement changed in 5.0a1: >=3.8 → >=3.10.
What you must change
Security52
Django GeoDjango spatial lookups allow file writes and outbound requests through GDAL raster parsing
High · CVSS 8.8An issue was discovered in Django 5.2 before 5.2.17 and 6.0 before 6.0.8.
An issue was discovered in Django 6.0 before 6.0.7 and 5.2 before 5.2.16.
An issue was discovered in Django 6.0 before 6.0.7 and 5.2 before 5.2.16.
Medium · CVSS 5.3An issue was discovered in Django 6.0 before 6.0.7 and 5.2 before 5.2.16.
An issue was discovered in Django 5.2 before 5.2.15 and 6.0 before 6.0.6.
Medium · CVSS 5.3An issue was discovered in Django 6.0 before 6.0.6 and 5.2 before 5.2.15.
An issue was discovered in Django 5.2 before 5.2.15 and 6.0 before 6.0.6.
An issue was discovered in Django 5.2 before 5.2.15 and 6.0 before 6.0.6.
Medium · CVSS 5.3An issue was discovered in Django 6.0 before 6.0.6 and 5.2 before 5.2.15.
Medium · CVSS 4.3An issue was discovered in 6.0 before 6.0.5 and 5.2 before 5.2.14.
An issue was discovered in 6.0 before 6.0.5 and 5.2 before 5.2.14.
Medium · CVSS 6.5An issue was discovered in 6.0 before 6.0.5 and 5.2 before 5.2.14.
Medium · CVSS 5.3An issue was discovered in 6.0 before 6.0.4, 5.2 before 5.2.13, and 4.2 before 4.2.30.
High · CVSS 7.5An issue was discovered in 6.0 before 6.0.4, 5.2 before 5.2.13, and 4.2 before 4.2.30.
High · CVSS 7.5An issue was discovered in 6.0 before 6.0.4, 5.2 before 5.2.13, and 4.2 before 4.2.30.
Critical · CVSS 9.8An issue was discovered in 6.0 before 6.0.4, 5.2 before 5.2.13, and 4.2 before 4.2.30.
Medium · CVSS 6.5An issue was discovered in 6.0 before 6.0.4, 5.2 before 5.2.13, and 4.2 before 4.2.30.
Low · CVSS 2.7Django has a Race Condition vulnerability
Low · CVSS 3.7Django vulnerable to Uncontrolled Resource Consumption
High · CVSS 7.5An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28.
Medium · CVSS 5.4An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28.
Medium · CVSS 5.4An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28.
High · CVSS 7.5An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28.
High · CVSS 7.5An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28.
Medium · CVSS 5.3An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28.
Medium · CVSS 5.4An issue was discovered in 5.2 before 5.2.9, 5.1 before 5.1.15, and 4.2 before 4.2.27.
Medium · CVSS 4.3An issue was discovered in 5.2 before 5.2.9, 5.1 before 5.1.15, and 4.2 before 4.2.27.
High · CVSS 7.5An issue was discovered in 5.1 before 5.1.14, 4.2 before 4.2.26, and 5.2 before 5.2.8.
High · CVSS 7.5An issue was discovered in 5.1 before 5.1.14, 4.2 before 4.2.26, and 5.2 before 5.2.8.
Critical · CVSS 9.1Django vulnerable to partial directory traversal via archives
Low · CVSS 3.1An issue was discovered in Django 4.2 before 4.2.25, 5.1 before 5.1.13, and 5.2 before 5.2.7. QuerySet.annotate(), QuerySet.alias(), QuerySet.aggregate(), and QuerySet.extra() are subject to SQL injection in column aliases, when using a suitably crafted dictionary, with dictionary expansion, as the **kwargs passed to these methods (on MySQL and MariaDB).
Critical · CVSS 9.8An issue was discovered in Django 4.2 before 4.2.24, 5.1 before 5.1.12, and 5.2 before 5.2.6. FilteredRelation is subject to SQL injection in column aliases, using a suitably crafted dictionary, with dictionary expansion, as the **kwargs passed QuerySet.annotate() or QuerySet.alias().
High · CVSS 8.1An issue was discovered in Django 5.2 before 5.2.2, 5.1 before 5.1.10, and 4.2 before 4.2.22. Internal HTTP response logging does not escape request.path, which allows remote attackers to potentially manipulate log output via crafted URLs. This may lead to log injection or forgery when logs are viewed in terminals or processed by external systems.
An issue was discovered in Django 4.2 before 4.2.21, 5.1 before 5.1.9, and 5.2 before 5.2.1. The django.utils.html.strip_tags() function is vulnerable to a potential denial-of-service (slow performance) when processing inputs containing large sequences of incomplete HTML tags. The template filter striptags is also vulnerable, because it is built on top of strip_tags().
An issue was discovered in Django 5.1 before 5.1.8 and 5.0 before 5.0.14. The NFKC normalization is slow on Windows. As a consequence, django.contrib.auth.views.LoginView, django.contrib.auth.views.LogoutView, and django.views.i18n.set_language are subject to a potential denial-of-service attack via certain inputs with a very large number of Unicode characters.
An issue was discovered in Django 5.1 before 5.1.7, 5.0 before 5.0.13, and 4.2 before 4.2.20. The django.utils.text.wrap() method and wordwrap template filter are subject to a potential denial-of-service attack when used with very long strings.
An issue was discovered in Django 5.1 before 5.1.5, 5.0 before 5.0.11, and 4.2 before 4.2.18. Lack of upper-bound limit enforcement in strings passed when performing IPv6 validation could lead to a potential denial-of-service attack. The undocumented and private functions clean_ipv6_address and is_valid_ipv6_address are vulnerable, as is the django.forms.GenericIPAddressField form field. (The django.db.models.GenericIPAddressField model field is not affected.)
An issue was discovered in Django 5.1 before 5.1.4, 5.0 before 5.0.10, and 4.2 before 4.2.17. Direct usage of the django.db.models.fields.json.HasKey lookup, when an Oracle database is used, is subject to SQL injection if untrusted data is used as an lhs value. (Applications that use the jsonfield.has_key lookup via __ are unaffected.)
An issue was discovered in Django 5.1 before 5.1.4, 5.0 before 5.0.10, and 4.2 before 4.2.17. The strip_tags() method and striptags template filter are subject to a potential denial-of-service attack via certain inputs containing large sequences of nested incomplete HTML entities.
An issue was discovered in Django 5.1 before 5.1.1, 5.0 before 5.0.9, and 4.2 before 4.2.16. The urlize() and urlizetrunc() template filters are subject to a potential denial-of-service attack via very large inputs with a specific sequence of characters.
Django allows enumeration of user e-mail addresses
Low · CVSS 3.7An issue was discovered in Django 5.0 before 5.0.8 and 4.2 before 4.2.15. The floatformat template filter is subject to significant memory consumption when given a string representation of a number in scientific notation with a large exponent.
An issue was discovered in Django 5.0 before 5.0.8 and 4.2 before 4.2.15. The urlize() and urlizetrunc() template filters are subject to a potential denial-of-service attack via very large inputs with a specific sequence of characters.
An issue was discovered in Django 5.0 before 5.0.8 and 4.2 before 4.2.15. QuerySet.values() and values_list() methods on models with a JSONField are subject to SQL injection in column aliases via a crafted JSON object key as a passed *arg.
An issue was discovered in Django 5.0 before 5.0.8 and 4.2 before 4.2.15. The urlize and urlizetrunc template filters, and the AdminURLFieldWidget widget, are subject to a potential denial-of-service attack via certain inputs with a very large number of Unicode characters.
An issue was discovered in Django 4.2 before 4.2.14 and 5.0 before 5.0.7. urlize and urlizetrunc were subject to a potential denial of service attack via certain inputs with a very large number of brackets.
An issue was discovered in Django 5.0 before 5.0.7 and 4.2 before 4.2.14. get_supported_language_variant() was subject to a potential denial-of-service attack when used with very long strings containing specific characters.
An issue was discovered in Django 5.0 before 5.0.7 and 4.2 before 4.2.14. The django.contrib.auth.backends.ModelBackend.authenticate() method allows remote attackers to enumerate users via a timing attack involving login requests for users with an unusable password.
An issue was discovered in Django 5.0 before 5.0.7 and 4.2 before 4.2.14. Derived classes of the django.core.files.storage.Storage base class, when they override generate_filename() without replicating the file-path validations from the parent class, potentially allow directory traversal via certain inputs during a save() call. (Built-in Storage sub-classes are unaffected.)
In Django 3.2 before 3.2.25, 4.2 before 4.2.11, and 5.0 before 5.0.3, the django.utils.text.Truncator.words() method (with html=True) and the truncatewords_html template filter are subject to a potential regular expression denial-of-service attack via a crafted string. NOTE: this issue exists because of an incomplete fix for CVE-2019-14232 and CVE-2023-43665.
An issue was discovered in Django 3.2 before 3.2.24, 4.2 before 4.2.10, and Django 5.0 before 5.0.2. The intcomma template filter was subject to a potential denial-of-service attack when used with very long strings.
API changes
Generated by DepDelta from published Python source. Not mixed with prose notes.
- removed:
export RemovedInDjango50Warning - removed:
export RemovedInDjango51Warning - removed:
property LazySettings.DEFAULT_FILE_STORAGE - removed:
property LazySettings.STATICFILES_STORAGE - removed:
property LazySettings.USE_L10N - removed:
variable CSRF_COOKIE_MASKED_DEPRECATED_MSG - removed:
variable DEFAULT_FILE_STORAGE_DEPRECATED_MSG - removed:
variable STATICFILES_STORAGE_DEPRECATED_MSG - removed:
variable USE_DEPRECATED_PYTZ_DEPRECATED_MSG - removed:
variable USE_L10N_DEPRECATED_MSG - added:
export RemovedInDjango60Warning - added:
variable FORMS_URLFIELD_ASSUME_HTTPS_DEPRECATED_MSG
- removed:
variable CSRF_COOKIE_MASKED - removed:
variable DEFAULT_FILE_STORAGE - removed:
variable STATICFILES_STORAGE - removed:
variable USE_DEPRECATED_PYTZ - removed:
variable USE_L10N - added:
variable FORMS_URLFIELD_ASSUME_HTTPS - added:
variable SIGNED_COOKIE_LEGACY_SALT_FALLBACK
- added:
variable DATETIME_FORMAT - added:
variable DATETIME_INPUT_FORMATS - added:
variable DATE_FORMAT - added:
variable DATE_INPUT_FORMATS - added:
variable DECIMAL_SEPARATOR - added:
variable FIRST_DAY_OF_WEEK - added:
variable MONTH_DAY_FORMAT - added:
variable NUMBER_GROUPING - added:
variable SHORT_DATETIME_FORMAT - added:
variable SHORT_DATE_FORMAT - added:
variable THOUSAND_SEPARATOR - added:
variable TIME_FORMAT - added:
variable YEAR_MONTH_FORMAT
- added:
variable DATETIME_FORMAT - added:
variable DATETIME_INPUT_FORMATS - added:
variable DATE_FORMAT - added:
variable DATE_INPUT_FORMATS - added:
variable DECIMAL_SEPARATOR - added:
variable FIRST_DAY_OF_WEEK - added:
variable MONTH_DAY_FORMAT - added:
variable NUMBER_GROUPING - added:
variable SHORT_DATETIME_FORMAT - added:
variable SHORT_DATE_FORMAT - added:
variable THOUSAND_SEPARATOR - added:
variable TIME_FORMAT - added:
variable YEAR_MONTH_FORMAT
- added:
variable DATETIME_FORMAT - added:
variable DATETIME_INPUT_FORMATS - added:
variable DATE_FORMAT - added:
variable DATE_INPUT_FORMATS - added:
variable DECIMAL_SEPARATOR - added:
variable FIRST_DAY_OF_WEEK - added:
variable MONTH_DAY_FORMAT - added:
variable NUMBER_GROUPING - added:
variable SHORT_DATETIME_FORMAT - added:
variable SHORT_DATE_FORMAT - added:
variable THOUSAND_SEPARATOR - added:
variable TIME_FORMAT - added:
variable YEAR_MONTH_FORMAT
- added:
variable DATETIME_FORMAT - added:
variable DATETIME_INPUT_FORMATS - added:
variable DATE_FORMAT - added:
variable DATE_INPUT_FORMATS - added:
variable DECIMAL_SEPARATOR - added:
variable FIRST_DAY_OF_WEEK - added:
variable MONTH_DAY_FORMAT - added:
variable NUMBER_GROUPING - added:
variable SHORT_DATETIME_FORMAT - added:
variable SHORT_DATE_FORMAT - added:
variable THOUSAND_SEPARATOR - added:
variable TIME_FORMAT - added:
variable YEAR_MONTH_FORMAT
- added:
variable DATETIME_FORMAT - added:
variable DATETIME_INPUT_FORMATS - added:
variable DATE_FORMAT - added:
variable DATE_INPUT_FORMATS - added:
variable DECIMAL_SEPARATOR - added:
variable FIRST_DAY_OF_WEEK - added:
variable MONTH_DAY_FORMAT - added:
variable NUMBER_GROUPING - added:
variable SHORT_DATETIME_FORMAT - added:
variable SHORT_DATE_FORMAT - added:
variable THOUSAND_SEPARATOR - added:
variable TIME_FORMAT - added:
variable YEAR_MONTH_FORMAT
- added:
variable NUMBER_GROUPING
- added:
variable DATE_FORMAT - added:
variable DECIMAL_SEPARATOR - added:
variable FIRST_DAY_OF_WEEK - added:
variable MONTH_DAY_FORMAT - added:
variable NUMBER_GROUPING - added:
variable SHORT_DATETIME_FORMAT - added:
variable SHORT_DATE_FORMAT - added:
variable THOUSAND_SEPARATOR - added:
variable TIME_FORMAT - added:
variable YEAR_MONTH_FORMAT
- added:
export ShowFacets
- added:
class AlreadyRegistered(Exception) - added:
class NotRegistered(Exception)
- changed:
class FieldListFilter(ListFilter) → class FieldListFilter(FacetsMixin, ListFilter) - changed:
class SimpleListFilter(ListFilter) → class SimpleListFilter(FacetsMixin, ListFilter) - added:
class FacetsMixin - added:
method AllValuesFieldListFilter.get_facet_counts(pk_attname, filtered_qs) - added:
method BooleanFieldListFilter.get_facet_counts(pk_attname, filtered_qs) - added:
method ChoicesFieldListFilter.get_facet_counts(pk_attname, filtered_qs) - added:
method DateFieldListFilter.get_facet_counts(pk_attname, filtered_qs) - added:
method EmptyFieldListFilter.get_facet_counts(pk_attname, filtered_qs) - added:
method EmptyFieldListFilter.get_lookup_condition() - added:
method FacetsMixin.get_facet_counts(pk_attname, filtered_qs) - added:
method FacetsMixin.get_facet_queryset(changelist) - added:
method RelatedFieldListFilter.get_facet_counts(pk_attname, filtered_qs) - added:
method SimpleListFilter.get_facet_counts(pk_attname, filtered_qs)
- removed:
variable checkbox - added:
property Fieldset.is_collapsible - added:
property InlineAdminFormSet.is_collapsible
- added:
method LogEntryManager.log_actions(user_id, queryset, action_flag, change_message=…, *, single_object=…)
- changed:
method BaseModelAdmin.lookup_allowed(lookup, value) → method BaseModelAdmin.lookup_allowed(lookup, value, request=…) - added:
class ShowFacets(enum.Enum) - added:
field ModelAdmin.show_facets - added:
field ShowFacets.ALLOW - added:
field ShowFacets.ALWAYS - added:
field ShowFacets.NEVER - added:
method ModelAdmin.log_deletions(request, queryset) - added:
variable IS_FACETS_VAR
- removed:
class AlreadyRegistered(Exception) - removed:
class NotRegistered(Exception) - added:
method AdminSite.get_log_entries(request) - added:
method AdminSite.get_model_admin(model)
- changed:
function display_for_field(value, field, empty_value_display) → function display_for_field(value, field, empty_value_display, avoid_link=…) - added:
function build_q_object_from_lookup_parameters(parameters) - added:
function get_last_value_from_parameters(parameters, key)
- changed:
method ChangeList.get_queryset(request) → method ChangeList.get_queryset(request, exclude_parameters=…)
- added:
property RelatedFieldWidgetWrapper.choices
- added:
function split_explicit_title(text) - added:
function strip_p_tags(value) - added:
variable explicit_title_re
- added:
function user_has_model_view_permission(user, opts)
- added:
async function aauthenticate(request=…, **credentials) - added:
async function aget_user(request) - added:
async function alogin(request, user, backend=…) - added:
async function alogout(request) - added:
async function aupdate_session_auth_hash(request, user) - added:
export RemovedInDjango61Warning - added:
export signature
- changed:
method UserAdmin.lookup_allowed(lookup, value) → method UserAdmin.lookup_allowed(lookup, value, request=…)
- added:
async method BaseBackend.aauthenticate(request, **kwargs) - added:
async method BaseBackend.aget_all_permissions(user_obj, obj=…) - added:
async method BaseBackend.aget_group_permissions(user_obj, obj=…) - added:
async method BaseBackend.aget_user(user_id) - added:
async method BaseBackend.aget_user_permissions(user_obj, obj=…) - added:
async method BaseBackend.ahas_perm(user_obj, perm, obj=…) - added:
async method ModelBackend.aauthenticate(request, username=…, password=…, **kwargs) - added:
async method ModelBackend.aget_group_permissions(user_obj, obj=…) - added:
async method ModelBackend.aget_user(user_id) - added:
async method ModelBackend.aget_user_permissions(user_obj, obj=…) - added:
async method ModelBackend.ahas_module_perms(user_obj, app_label) - added:
async method ModelBackend.ahas_perm(user_obj, perm, obj=…) - added:
async method RemoteUserBackend.aauthenticate(request, remote_user) - added:
async method RemoteUserBackend.aconfigure_user(request, user, created=…)
- removed:
method BaseUserManager.make_random_password(length=…, allowed_chars=…) - added:
async method AbstractBaseUser.acheck_password(raw_password) - added:
async method BaseUserManager.aget_by_natural_key(username)
- added:
function check_middleware(app_configs, **kwargs)
- added:
function login_not_required(view_func)
- removed:
field AdminPasswordChangeForm.error_messages - removed:
field BaseUserCreationForm.error_messages - removed:
field SetPasswordForm.error_messages - removed:
method AdminPasswordChangeForm.clean_password2() - removed:
method BaseUserCreationForm.clean_password2() - removed:
method SetPasswordForm.clean_new_password2() - changed:
class AdminPasswordChangeForm(forms.Form) → class AdminPasswordChangeForm(SetUnusablePasswordMixin, SetPasswordMixin, forms.Form) - changed:
class BaseUserCreationForm(forms.ModelForm) → class BaseUserCreationForm(SetPasswordMixin, forms.ModelForm) - changed:
class SetPasswordForm(forms.Form) → class SetPasswordForm(SetPasswordMixin, forms.Form) - added:
class AdminUserCreationForm(SetUnusablePasswordMixin, UserCreationForm) - added:
class SetPasswordMixin - added:
class SetUnusablePasswordMixin - added:
constructor AdminUserCreationForm(*args, **kwargs) - added:
field AdminPasswordChangeForm.usable_password_help_text - added:
field AdminUserCreationForm.usable_password - added:
field SetPasswordMixin.error_messages - added:
field SetUnusablePasswordMixin.usable_password_help_text - added:
method AdminPasswordChangeForm.clean() - added:
method BaseUserCreationForm.clean() - added:
method SetPasswordForm.clean() - added:
method SetPasswordMixin.set_password_and_save(user, password_field_name=…, commit=…) - added:
method SetPasswordMixin.validate_password_for_user(user, password_field_name=…) - added:
method SetPasswordMixin.validate_passwords(password1_field_name=…, password2_field_name=…) - added:
method SetUnusablePasswordMixin.set_password_and_save(user, commit=…, **kwargs) - added:
method SetUnusablePasswordMixin.validate_password_for_user(user, **kwargs) - added:
method SetUnusablePasswordMixin.validate_passwords(password1_field_name=…, password2_field_name=…, usable_password_field_name=…) - added:
static method SetPasswordMixin.create_password_fields(label1=…, label2=…) - added:
static method SetUnusablePasswordMixin.create_usable_password_field(help_text=…)
- removed:
class CryptPasswordHasher(BasePasswordHasher) - removed:
class SHA1PasswordHasher(BasePasswordHasher) - removed:
class UnsaltedMD5PasswordHasher(BasePasswordHasher) - removed:
class UnsaltedSHA1PasswordHasher(BasePasswordHasher) - removed:
constructor CryptPasswordHasher(*args, **kwargs) - removed:
constructor SHA1PasswordHasher(*args, **kwargs) - removed:
constructor UnsaltedMD5PasswordHasher(*args, **kwargs) - removed:
constructor UnsaltedSHA1PasswordHasher(*args, **kwargs) - removed:
field CryptPasswordHasher.algorithm - removed:
field CryptPasswordHasher.library - removed:
field SHA1PasswordHasher.algorithm - removed:
field UnsaltedMD5PasswordHasher.algorithm - removed:
field UnsaltedSHA1PasswordHasher.algorithm - removed:
method CryptPasswordHasher.decode(encoded) - removed:
method CryptPasswordHasher.encode(password, salt) - removed:
method CryptPasswordHasher.harden_runtime(password, encoded) - removed:
method CryptPasswordHasher.safe_summary(encoded) - removed:
method CryptPasswordHasher.salt() - removed:
method CryptPasswordHasher.verify(password, encoded) - removed:
method SHA1PasswordHasher.decode(encoded) - removed:
method SHA1PasswordHasher.encode(password, salt) - removed:
method SHA1PasswordHasher.harden_runtime(password, encoded) - removed:
method SHA1PasswordHasher.must_update(encoded) - removed:
method SHA1PasswordHasher.safe_summary(encoded) - removed:
method SHA1PasswordHasher.verify(password, encoded) - removed:
method UnsaltedMD5PasswordHasher.decode(encoded) - removed:
method UnsaltedMD5PasswordHasher.encode(password, salt) - removed:
method UnsaltedMD5PasswordHasher.harden_runtime(password, encoded) - removed:
method UnsaltedMD5PasswordHasher.safe_summary(encoded) - removed:
method UnsaltedMD5PasswordHasher.salt() - removed:
method UnsaltedMD5PasswordHasher.verify(password, encoded) - removed:
method UnsaltedSHA1PasswordHasher.decode(encoded) - removed:
method UnsaltedSHA1PasswordHasher.encode(password, salt) - removed:
method UnsaltedSHA1PasswordHasher.harden_runtime(password, encoded) - removed:
method UnsaltedSHA1PasswordHasher.safe_summary(encoded) - removed:
method UnsaltedSHA1PasswordHasher.salt() - removed:
method UnsaltedSHA1PasswordHasher.verify(password, encoded) - added:
async function acheck_password(password, encoded, setter=…, preferred=…) - added:
function verify_password(password, encoded, preferred=…)
- changed:
class RemoteUserMiddleware(MiddlewareMixin) → class RemoteUserMiddleware - added:
async function auser(request) - added:
async method RemoteUserMiddleware.aprocess_request(request) - added:
class LoginRequiredMiddleware(MiddlewareMixin) - added:
constructor RemoteUserMiddleware(get_response) - added:
field LoginRequiredMiddleware.redirect_field_name - added:
field RemoteUserMiddleware.async_capable - added:
field RemoteUserMiddleware.sync_capable - added:
method LoginRequiredMiddleware.get_login_url(view_func) - added:
method LoginRequiredMiddleware.get_redirect_field_name(view_func) - added:
method LoginRequiredMiddleware.handle_no_permission(request, view_func) - added:
method LoginRequiredMiddleware.process_view(request, view_func, view_args, view_kwargs)
- added:
async method AnonymousUser.aget_all_permissions(obj=…) - added:
async method AnonymousUser.aget_group_permissions(obj=…) - added:
async method AnonymousUser.aget_user_permissions(obj=…) - added:
async method AnonymousUser.ahas_module_perms(module) - added:
async method AnonymousUser.ahas_perm(perm, obj=…) - added:
async method AnonymousUser.ahas_perms(perm_list, obj=…) - added:
async method GroupManager.aget_by_natural_key(name) - added:
async method PermissionsMixin.aget_all_permissions(obj=…) - added:
async method PermissionsMixin.aget_group_permissions(obj=…) - added:
async method PermissionsMixin.aget_user_permissions(obj=…) - added:
async method PermissionsMixin.ahas_module_perms(app_label) - added:
async method PermissionsMixin.ahas_perm(perm, obj=…) - added:
async method PermissionsMixin.ahas_perms(perm_list, obj=…) - added:
async method UserManager.acreate_superuser(username, email=…, password=…, **extra_fields) - added:
async method UserManager.acreate_user(username, email=…, password=…, **extra_fields)
- added:
method CommonPasswordValidator.get_error_message() - added:
method MinimumLengthValidator.get_error_message() - added:
method NumericPasswordValidator.get_error_message() - added:
method UserAttributeSimilarityValidator.get_error_message()
- removed:
field LogoutView.get
- removed:
field GenericForeignKey.auto_created - removed:
field GenericForeignKey.concrete - removed:
field GenericForeignKey.editable - removed:
field GenericForeignKey.hidden - removed:
field GenericForeignKey.is_relation - removed:
field GenericForeignKey.related_model - removed:
field GenericForeignKey.remote_field - removed:
method GenericForeignKey.get_cache_name() - changed:
class GenericForeignKey(FieldCacheMixin) → class GenericForeignKey(FieldCacheMixin, Field) - changed:
method GenericForeignKey.get_content_type(obj=…, id=…, using=…) → method GenericForeignKey.get_content_type(obj=…, id=…, using=…, model=…) - added:
method GenericForeignKey.get_attname_column() - added:
method GenericForeignKey.get_prefetch_querysets(instances, querysets=…) - added:
method GenericRelation.get_foreign_related_value(instance) - added:
method GenericRelation.get_local_related_value(instance) - added:
property GenericForeignKey.cache_name
- added:
field Command.help
- changed:
method ContentType.get_object_for_this_type(**kwargs) → method ContentType.get_object_for_this_type(using=…, **kwargs)
- added:
class GenericPrefetch(Prefetch) - added:
constructor GenericPrefetch(lookup, querysets, to_attr=…) - added:
method GenericPrefetch.get_current_querysets(level)
- removed:
export GeoModelAdmin - removed:
export OSMGeoAdmin - removed:
export OpenLayersWidget
- removed:
class GeoModelAdmin(ModelAdmin) - removed:
class OSMGeoAdmin(GeoModelAdmin) - removed:
constructor GeoModelAdmin(*args, **kwargs) - removed:
field GeoModelAdmin.debug - removed:
field GeoModelAdmin.default_lat - removed:
field GeoModelAdmin.default_lon - removed:
field GeoModelAdmin.default_zoom - removed:
field GeoModelAdmin.display_srid - removed:
field GeoModelAdmin.display_wkt - removed:
field GeoModelAdmin.extra_js - removed:
field GeoModelAdmin.layerswitcher - removed:
field GeoModelAdmin.map_height - removed:
field GeoModelAdmin.map_srid - removed:
field GeoModelAdmin.map_template - removed:
field GeoModelAdmin.map_width - removed:
field GeoModelAdmin.max_extent - removed:
field GeoModelAdmin.max_resolution - removed:
field GeoModelAdmin.max_zoom - removed:
field GeoModelAdmin.min_zoom - removed:
field GeoModelAdmin.modifiable - removed:
field GeoModelAdmin.mouse_position - removed:
field GeoModelAdmin.num_zoom - removed:
field GeoModelAdmin.openlayers_url - removed:
field GeoModelAdmin.point_zoom - removed:
field GeoModelAdmin.scale_text - removed:
field GeoModelAdmin.scrollable - removed:
field GeoModelAdmin.units - removed:
field GeoModelAdmin.widget - removed:
field GeoModelAdmin.wms_layer - removed:
field GeoModelAdmin.wms_name - removed:
field GeoModelAdmin.wms_options - removed:
field GeoModelAdmin.wms_url - removed:
field OSMGeoAdmin.map_srid - removed:
field OSMGeoAdmin.map_template - removed:
field OSMGeoAdmin.max_extent - removed:
field OSMGeoAdmin.max_resolution - removed:
field OSMGeoAdmin.num_zoom - removed:
field OSMGeoAdmin.point_zoom - removed:
field OSMGeoAdmin.units - removed:
method GeoModelAdmin.formfield_for_dbfield(db_field, request, **kwargs) - removed:
method GeoModelAdmin.get_map_widget(db_field) - removed:
property GeoModelAdmin.media - removed:
variable spherical_mercator_srid
- removed:
class OpenLayersWidget(Textarea) - removed:
constructor OpenLayersWidget(*args, **kwargs) - removed:
method OpenLayersWidget.get_context(name, value, attrs) - removed:
method OpenLayersWidget.map_options() - removed:
variable geo_context - removed:
variable logger
- added:
property DatabaseFeatures.django_test_skips
- removed:
field MySQLOperations.disallowed_aggregates - added:
method MySQLOperations.spatial_aggregate_name(agg_name) - added:
property MySQLOperations.collect - added:
property MySQLOperations.disallowed_aggregates
- removed:
constructor MySQLGISSchemaEditor(*args, **kwargs) - removed:
field MySQLGISSchemaEditor.sql_drop_spatial_index - removed:
method MySQLGISSchemaEditor.add_field(model, field) - removed:
method MySQLGISSchemaEditor.column_sql(model, field, include_default=…) - removed:
method MySQLGISSchemaEditor.create_model(model) - removed:
method MySQLGISSchemaEditor.create_spatial_indexes()
- removed:
field OracleGISSchemaEditor.sql_drop_spatial_index
- added:
field DatabaseWrapper.features_class - added:
field DatabaseWrapper.introspection_class - added:
field DatabaseWrapper.ops_class
- changed:
method SpatialiteSchemaEditor.alter_db_table(model, old_db_table, new_db_table, disable_constraints=…) → method SpatialiteSchemaEditor.alter_db_table(model, old_db_table, new_db_table)
- changed:
constructor GeometryField(verbose_name=…, dim=…, geography=…, *, extent=…, tolerance=…, **kwargs) → constructor GeometryField(verbose_name=…, dim=…, geography=…, *, extent=…, tolerance=…, max_geom_collections=…, **kwargs)
- removed:
field FromWKB.output_field - removed:
field FromWKT.arity - removed:
field FromWKT.geom_param_pos - removed:
field FromWKT.output_field - changed:
class FromWKT(GeoFunc) → class FromWKT(FromWKB) - added:
class ClosestPoint(GeomOutputGeoFunc) - added:
constructor FromWKB(expression, srid=…, **extra) - added:
field ClosestPoint.arity - added:
field ClosestPoint.geom_param_pos - added:
method BoundingCircle.as_sqlite(compiler, connection, **extra_context) - added:
method FromWKB.as_oracle(compiler, connection, **extra_context)
- changed:
constructor GeometryField(*, srid=…, geom_type=…, **kwargs) → constructor GeometryField(*, srid=…, geom_type=…, max_geom_collections=…, **kwargs) - added:
field GeometryField.max_geom_collections
- removed:
field BaseGeometryWidget.map_height - removed:
field BaseGeometryWidget.map_width - added:
field BaseGeometryWidget.max_geom_collections
- removed:
field OGRGeometry.coord_dim - removed:
property Polygon.centroid - added:
class CircularString(LineString) - added:
class CompoundCurve(OGRGeometry) - added:
class CurvePolygon(Polygon) - added:
class MultiCurve(GeometryCollection) - added:
class MultiSurface(GeometryCollection) - added:
field CircularString.geos_support - added:
field CompoundCurve.geos_support - added:
field CurvePolygon.geos_support - added:
field MultiCurve.geos_support - added:
field MultiSurface.geos_support - added:
field OGRGeometry.geos_support - added:
method OGRGeometry.get_curve_geometry() - added:
method OGRGeometry.get_linear_geometry() - added:
method OGRGeometry.set_3d(value) - added:
method OGRGeometry.set_measured(value) - added:
property LineString.m - added:
property OGRGeometry.centroid - added:
property OGRGeometry.coord_dim - added:
property OGRGeometry.has_curve - added:
property OGRGeometry.is_3d - added:
property OGRGeometry.is_measured - added:
property Point.m
- removed:
variable get_driver_name - removed:
variable release_ds - added:
variable GDAL_OF_ALL - added:
variable GDAL_OF_RASTER - added:
variable GDAL_OF_READONLY - added:
variable GDAL_OF_UPDATE - added:
variable GDAL_OF_VECTOR - added:
variable get_dataset_driver - added:
variable get_driver_description
- added:
variable get_curve_geom - added:
variable get_linear_geom - added:
variable getm - added:
variable has_curve_geom - added:
variable is_3d - added:
variable is_measured - added:
variable set_3d - added:
variable set_measured - added:
variable to_iso_wkb - added:
variable to_iso_wkt
- removed:
variable get_driver - removed:
variable get_driver_by_name - removed:
variable get_driver_count - removed:
variable get_driver_description - removed:
variable register_all
- added:
class DisallowedRasterLookup(SuspiciousOperation) - added:
static method GDALRaster.check_raster_lookup_value(ds_input)
- removed:
export GeoIP2 - removed:
export GeoIP2Exception - added:
class GeoIP2 - added:
class GeoIP2Exception(Exception) - added:
constructor GeoIP2(path=…, cache=…, country=…, city=…) - added:
field GeoIP2.MODE_AUTO - added:
field GeoIP2.MODE_FILE - added:
field GeoIP2.MODE_MEMORY - added:
field GeoIP2.MODE_MMAP - added:
field GeoIP2.MODE_MMAP_EXT - added:
field GeoIP2.cache_options - added:
method GeoIP2.city(query) - added:
method GeoIP2.coords(query, ordering=…) - added:
method GeoIP2.country(query) - added:
method GeoIP2.country_code(query) - added:
method GeoIP2.country_name(query) - added:
method GeoIP2.geos(query) - added:
method GeoIP2.lat_lon(query) - added:
method GeoIP2.lon_lat(query) - added:
property GeoIP2.is_city - added:
property GeoIP2.is_country - added:
static method GeoIP2.open(full_path, cache)
- removed:
class GeoIP2 - removed:
class GeoIP2Exception(Exception) - removed:
constructor GeoIP2(path=…, cache=…, country=…, city=…) - removed:
field GeoIP2.MODE_AUTO - removed:
field GeoIP2.MODE_FILE - removed:
field GeoIP2.MODE_MEMORY - removed:
field GeoIP2.MODE_MMAP - removed:
field GeoIP2.MODE_MMAP_EXT - removed:
field GeoIP2.cache_options - removed:
method GeoIP2.city(query) - removed:
method GeoIP2.coords(query, ordering=…) - removed:
method GeoIP2.country(query) - removed:
method GeoIP2.country_code(query) - removed:
method GeoIP2.country_name(query) - removed:
method GeoIP2.geos(query) - removed:
method GeoIP2.lat_lon(query) - removed:
method GeoIP2.lon_lat(query) - removed:
property GeoIP2.info - removed:
static method GeoIP2.open(full_path, cache) - removed:
variable GEOIP_SETTINGS
- removed:
function City(response) - removed:
function Country(response)
- changed:
constructor GEOSGeometry(geo_input, srid=…) → constructor GEOSGeometry(geo_input, srid=…, *, max_geom_collections=…) - added:
method GEOSGeometryBase.equals_identical(other)
- added:
export geos_equalsidentical
- added:
function default_trim_value() - added:
variable DEFAULT_TRIM_VALUE - added:
variable MAX_GEOM_COLLECTIONS
- added:
variable geos_equalsidentical
- removed:
export ImproperlyConfigured
- added:
export Message
- removed:
method MessageSerializer.dumps(obj) - added:
class MessagePartGatherSerializer - added:
class MessagePartSerializer - added:
field CookieStorage.not_finished_json - added:
function bisect_keep_left(a, fn) - added:
function bisect_keep_right(a, fn) - added:
method MessagePartGatherSerializer.dumps(obj) - added:
method MessagePartSerializer.dumps(obj)
- removed:
constructor JSONBAgg(*expressions, default=…, **extra) - removed:
field ArrayAgg.deprecation_msg - removed:
field ArrayAgg.deprecation_value - removed:
field JSONBAgg.deprecation_empty_result_set_value - removed:
field JSONBAgg.deprecation_msg - removed:
field JSONBAgg.deprecation_value - removed:
field StringAgg.deprecation_msg - removed:
field StringAgg.deprecation_value - changed:
class ArrayAgg(DeprecatedConvertValueMixin, OrderableAggMixin, Aggregate) → class ArrayAgg(OrderableAggMixin, Aggregate) - changed:
class JSONBAgg(DeprecatedConvertValueMixin, OrderableAggMixin, Aggregate) → class JSONBAgg(OrderableAggMixin, Aggregate) - changed:
class StringAgg(DeprecatedConvertValueMixin, OrderableAggMixin, Aggregate) → class StringAgg(OrderableAggMixin, Aggregate)
- removed:
method OrderableAggMixin.resolve_expression(*args, **kwargs) - changed:
constructor OrderableAggMixin(*expressions, ordering=…, **extra) → constructor OrderableAggMixin(*expressions, ordering=…, order_by=…, **extra)
- removed:
method ExclusionConstraint.check_supported(schema_editor) - changed:
constructor ExclusionConstraint(*, name, expressions, index_type=…, condition=…, deferrable=…, include=…, opclasses=…, violation_error_message=…) → constructor ExclusionConstraint(*, name, expressions, index_type=…, condition=…, deferrable=…, include=…, violation_error_code=…, violation_error_message=…)
- added:
method ArrayField.slice_expression(expression, start, length)
- removed:
class CIText - removed:
constructor CICharField(*args, **kwargs) - removed:
constructor CIEmailField(*args, **kwargs) - removed:
constructor CIText(*args, **kwargs) - removed:
constructor CITextField(*args, **kwargs) - removed:
field CICharField.system_check_deprecated_details - removed:
field CIEmailField.system_check_deprecated_details - removed:
field CITextField.system_check_deprecated_details - removed:
method CIText.db_type(connection) - removed:
method CIText.get_internal_type() - changed:
class CICharField(CIText, CharField) → class CICharField(CharField) - changed:
class CIEmailField(CIText, EmailField) → class CIEmailField(EmailField) - changed:
class CITextField(CIText, TextField) → class CITextField(TextField) - added:
field CICharField.system_check_removed_details - added:
field CIEmailField.system_check_removed_details - added:
field CITextField.system_check_removed_details
- removed:
method SpGistIndex.check_supported(schema_editor) - changed:
constructor BTreeIndex(*expressions, fillfactor=…, **kwargs) → constructor BTreeIndex(*expressions, fillfactor=…, deduplicate_items=…, **kwargs)
- added:
field AddConstraintNotValid.category - added:
field AddIndexConcurrently.category - added:
field CreateCollation.category - added:
field CreateExtension.category - added:
field RemoveCollation.category - added:
field RemoveIndexConcurrently.category - added:
field ValidateConstraint.category - added:
method CreateCollation.reduce(operation, app_label)
- added:
async method SessionBase.acreate() - added:
async method SessionBase.acycle_key() - added:
async method SessionBase.adelete(session_key=…) - added:
async method SessionBase.adelete_test_cookie() - added:
async method SessionBase.aexists(session_key) - added:
async method SessionBase.aflush() - added:
async method SessionBase.aget(key, default=…) - added:
async method SessionBase.aget_expire_at_browser_close() - added:
async method SessionBase.aget_expiry_age(**kwargs) - added:
async method SessionBase.aget_expiry_date(**kwargs) - added:
async method SessionBase.ahas_key(key) - added:
async method SessionBase.aitems() - added:
async method SessionBase.akeys() - added:
async method SessionBase.aload() - added:
async method SessionBase.apop(key, default=…) - added:
async method SessionBase.asave(must_create=…) - added:
async method SessionBase.aset(key, value) - added:
async method SessionBase.aset_expiry(value) - added:
async method SessionBase.aset_test_cookie() - added:
async method SessionBase.asetdefault(key, value) - added:
async method SessionBase.atest_cookie_worked() - added:
async method SessionBase.aupdate(dict_) - added:
async method SessionBase.avalues() - added:
async static method SessionBase.aclear_expired()
- added:
async method SessionStore.acache_key() - added:
async method SessionStore.acreate() - added:
async method SessionStore.adelete(session_key=…) - added:
async method SessionStore.aexists(session_key) - added:
async method SessionStore.aload() - added:
async method SessionStore.asave(must_create=…) - added:
async static method SessionStore.aclear_expired()
- added:
async method SessionStore.acache_key() - added:
async method SessionStore.adelete(session_key=…) - added:
async method SessionStore.aexists(session_key) - added:
async method SessionStore.aflush() - added:
async method SessionStore.aload() - added:
async method SessionStore.asave(must_create=…) - added:
variable logger
- added:
async method SessionStore.acreate() - added:
async method SessionStore.acreate_model_instance(data) - added:
async method SessionStore.adelete(session_key=…) - added:
async method SessionStore.aexists(session_key) - added:
async method SessionStore.aload() - added:
async method SessionStore.asave(must_create=…) - added:
async static method SessionStore.aclear_expired()
- removed:
method SessionStore.clean() - added:
async method SessionStore.acreate() - added:
async method SessionStore.adelete(session_key=…) - added:
async method SessionStore.aexists(session_key) - added:
async method SessionStore.aload() - added:
async method SessionStore.asave(must_create=…) - added:
async static method SessionStore.aclear_expired()
- added:
async method SessionStore.acreate() - added:
async method SessionStore.acycle_key() - added:
async method SessionStore.adelete(session_key=…) - added:
async method SessionStore.aexists(session_key=…) - added:
async method SessionStore.aload() - added:
async method SessionStore.asave(must_create=…) - added:
async static method SessionStore.aclear_expired()
- removed:
variable PickleSerializer
- removed:
class SitemapNotFound(Exception) - removed:
export NoReverseMatch - removed:
export RemovedInDjango50Warning - removed:
export reverse - removed:
function ping_google(sitemap_url=…, ping_url=…, sitemap_uses_https=…) - removed:
variable PING_URL
- removed:
class Command(BaseCommand) - removed:
field Command.help - removed:
method Command.add_arguments(parser) - removed:
method Command.handle(*args, **options)
- added:
function check_storages(app_configs=…, **kwargs) - added:
variable E005
- changed:
function find(path, all=…) → function find(path, find_all=…, **kwargs) - changed:
method AppDirectoriesFinder.find(path, all=…) → method AppDirectoriesFinder.find(path, find_all=…, **kwargs) - changed:
method BaseFinder.find(path, all=…) → method BaseFinder.find(path, find_all=…, **kwargs) - changed:
method BaseStorageFinder.find(path, all=…) → method BaseStorageFinder.find(path, find_all=…, **kwargs) - changed:
method FileSystemFinder.find(path, all=…) → method FileSystemFinder.find(path, find_all=…, **kwargs)
- added:
variable memcached_error_chars_re
- added:
function migrate_and_makemigrations_autodetector(**kwargs)
- added:
field Tags.commands
- removed:
function check_for_template_tags_with_the_same_name(app_configs, **kwargs) - removed:
function check_setting_app_dirs_loaders(app_configs, **kwargs) - removed:
function check_string_if_invalid_is_string(app_configs, **kwargs) - removed:
variable E001 - removed:
variable E002 - removed:
variable W003 - added:
function check_templates(app_configs, **kwargs)
- added:
function check_custom_error_handlers(app_configs, **kwargs)
- changed:
method File.open(mode=…) → method File.open(mode=…, *args, **kwargs)
- removed:
function get_storage_class(import_path=…)
- added:
method Storage.is_name_available(name, max_length=…)
- changed:
constructor FileSystemStorage(location=…, base_url=…, file_permissions_mode=…, directory_permissions_mode=…) → constructor FileSystemStorage(location=…, base_url=…, file_permissions_mode=…, directory_permissions_mode=…, allow_overwrite=…) - added:
method FileSystemStorage.get_alternative_name(file_root, file_ext) - added:
method FileSystemStorage.is_name_available(name, max_length=…)
- removed:
method ASGIHandler.get_script_prefix(scope) - added:
async method ASGIHandler.listen_for_disconnect(receive) - added:
async method ASGIHandler.run_get_response(request) - added:
function get_script_prefix(scope)
- added:
export EmailAlternative - added:
export EmailAttachment
- added:
method EmailMultiAlternatives.body_contains(text) - added:
variable EmailAlternative - added:
variable EmailAttachment
- changed:
class OutputWrapper(TextIOBase) → class OutputWrapper - added:
constructor LabelCommand(*args, **kwargs) - added:
method BaseCommand.get_check_kwargs(options)
- removed:
function is_writable(path) - added:
function is_dir_writable(path)
- added:
method Command.normalize_table_name(table_name)
- added:
field Command.autodetector
- removed:
field Command.requires_system_checks - added:
field Command.autodetector - added:
method Command.get_check_kwargs(options)
- removed:
field Command.requires_system_checks - added:
method Command.get_check_kwargs(options)
- added:
method Command.get_auto_imports() - added:
method Command.get_namespace(**options)
- changed:
function run_formatters(written_files, black_path=…) → function run_formatters(written_files, black_path=…, stderr=…)
- changed:
constructor Paginator(object_list, per_page, orphans=…, allow_empty_first_page=…) → constructor Paginator(object_list, per_page, orphans=…, allow_empty_first_page=…, error_messages=…) - added:
field Paginator.default_error_messages
- removed:
class PickleSerializer - removed:
constructor PickleSerializer(protocol=…) - removed:
method PickleSerializer.dumps(obj) - removed:
method PickleSerializer.loads(data)
- removed:
function Deserializer(stream_or_string, **options) - added:
class Deserializer(PythonDeserializer) - added:
constructor Deserializer(stream_or_string, **options)
- removed:
function Deserializer(stream_or_string, **options) - added:
class Deserializer(PythonDeserializer) - added:
constructor Deserializer(stream_or_string, **options)
- removed:
function Deserializer(object_list, *, using=…, ignorenonexistent=…, **options) - added:
class Deserializer(base.Deserializer) - added:
constructor Deserializer(object_list, *, using=…, ignorenonexistent=…, **options)
- removed:
function Deserializer(stream_or_string, **options) - removed:
method Serializer.handle_field(obj, field) - added:
class Deserializer(PythonDeserializer) - added:
constructor Deserializer(stream_or_string, **options)
- changed:
constructor Signer(*args, key=…, sep=…, salt=…, algorithm=…, fallback_keys=…) → constructor Signer(*, key=…, sep=…, salt=…, algorithm=…, fallback_keys=…)
- removed:
field URLValidator.ul - added:
class DomainNameValidator(RegexValidator) - added:
constructor DomainNameValidator(**kwargs) - added:
constructor StepValueValidator(limit_value, message=…, offset=…) - added:
field DomainNameValidator.ascii_only_domain_re - added:
field DomainNameValidator.ascii_only_hostname_re - added:
field DomainNameValidator.ascii_only_tld_re - added:
field DomainNameValidator.domain_re - added:
field DomainNameValidator.hostname_re - added:
field DomainNameValidator.max_length - added:
field DomainNameValidator.message - added:
field DomainNameValidator.tld_no_fqdn_re - added:
field DomainNameValidator.tld_re - added:
field DomainNameValidator.ul - added:
field EmailValidator.domain_re - added:
field EmailValidator.hostname_re - added:
field EmailValidator.tld_no_fqdn_re - added:
variable validate_domain_name
- added:
function close_old_connections(**kwargs) - added:
function reset_queries(**kwargs)
- removed:
function timezone_constructor(tzname)
- removed:
field BaseDatabaseFeatures.create_test_table_with_composite_primary_key - removed:
field BaseDatabaseFeatures.supports_atomic_references_rename - added:
field BaseDatabaseFeatures.delete_can_self_reference_subquery - added:
field BaseDatabaseFeatures.insert_test_table_with_defaults - added:
field BaseDatabaseFeatures.rounds_to_even - added:
field BaseDatabaseFeatures.supports_default_keyword_in_bulk_insert - added:
field BaseDatabaseFeatures.supports_default_keyword_in_insert - added:
field BaseDatabaseFeatures.supports_expression_defaults - added:
field BaseDatabaseFeatures.supports_frame_exclusion - added:
field BaseDatabaseFeatures.supports_nulls_distinct_unique_constraints - added:
field BaseDatabaseFeatures.supports_stored_generated_columns - added:
field BaseDatabaseFeatures.supports_tuple_lookups - added:
field BaseDatabaseFeatures.supports_virtual_generated_columns
- removed:
method BaseDatabaseOperations.window_frame_end(end) - removed:
method BaseDatabaseOperations.window_frame_start(start) - added:
method BaseDatabaseOperations.bulk_insert_sql(fields, placeholder_rows) - added:
method BaseDatabaseOperations.force_group_by() - added:
method BaseDatabaseOperations.prepare_join_on_clause(lhs_table, lhs_field, rhs_table, rhs_field) - added:
method BaseDatabaseOperations.window_frame_value(value)
- added:
field BaseDatabaseSchemaEditor.sql_pk_constraint - added:
method BaseDatabaseSchemaEditor.db_default_sql(field)
- added:
method Reference.references_index(table, index) - added:
method Statement.references_index(table, index) - added:
method Table.references_index(table, index)
- added:
field DatabaseCreation.serialize_db_to_string
- removed:
field DatabaseWrapper.data_types - added:
property DatabaseWrapper.data_types
- removed:
class SQLAggregateCompiler(compiler.SQLAggregateCompiler, SQLCompiler) - removed:
class SQLCompiler(compiler.SQLCompiler) - removed:
class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler) - removed:
method SQLCompiler.as_subquery_condition(alias, columns, compiler) - changed:
class SQLDeleteCompiler(compiler.SQLDeleteCompiler, SQLCompiler) → class SQLDeleteCompiler(BaseSQLDeleteCompiler) - changed:
class SQLUpdateCompiler(compiler.SQLUpdateCompiler, SQLCompiler) → class SQLUpdateCompiler(BaseSQLUpdateCompiler) - added:
export SQLAggregateCompiler - added:
export SQLCompiler - added:
export SQLInsertCompiler
- removed:
field DatabaseFeatures.can_release_savepoints - removed:
field DatabaseFeatures.create_test_table_with_composite_primary_key - removed:
field DatabaseFeatures.uses_savepoints - removed:
property DatabaseFeatures.has_select_for_update_nowait - removed:
property DatabaseFeatures.supports_over_clause - added:
field DatabaseFeatures.delete_can_self_reference_subquery - added:
field DatabaseFeatures.has_select_for_update_nowait - added:
field DatabaseFeatures.insert_test_table_with_defaults - added:
field DatabaseFeatures.supports_over_clause - added:
field DatabaseFeatures.supports_stored_generated_columns - added:
field DatabaseFeatures.supports_virtual_generated_columns - added:
property DatabaseFeatures.has_native_uuid_field - added:
property DatabaseFeatures.supports_expression_defaults
- removed:
method DatabaseOperations.adapt_decimalfield_value(value, max_digits=…, decimal_places=…) - removed:
method DatabaseOperations.bulk_insert_sql(fields, placeholder_rows)
- removed:
property DatabaseWrapper.cx_oracle_version - changed:
constructor FormatStylePlaceholderCursor(connection) → constructor FormatStylePlaceholderCursor(connection, database) - added:
method DatabaseWrapper.close_if_health_check_failed() - added:
method DatabaseWrapper.close_pool() - added:
property DatabaseWrapper.is_pool - added:
property DatabaseWrapper.oracledb_version - added:
property DatabaseWrapper.pool
- removed:
field DatabaseFeatures.bare_select_suffix - removed:
field DatabaseFeatures.create_test_table_with_composite_primary_key - removed:
field DatabaseFeatures.django_test_skips - removed:
field DatabaseFeatures.supports_boolean_expr_in_select_clause - removed:
field DatabaseFeatures.supports_comparing_boolean_expr - removed:
field DatabaseFeatures.supports_primitives_in_json_field - removed:
field DatabaseFeatures.test_collations - added:
field DatabaseFeatures.insert_test_table_with_defaults - added:
field DatabaseFeatures.supports_default_keyword_in_bulk_insert - added:
field DatabaseFeatures.supports_stored_generated_columns - added:
field DatabaseFeatures.supports_tuple_lookups - added:
field DatabaseFeatures.supports_virtual_generated_columns - added:
property DatabaseFeatures.bare_select_suffix - added:
property DatabaseFeatures.django_test_skips - added:
property DatabaseFeatures.supports_aggregation_over_interval_types - added:
property DatabaseFeatures.supports_boolean_expr_in_select_clause - added:
property DatabaseFeatures.supports_comparing_boolean_expr - added:
property DatabaseFeatures.supports_frame_exclusion - added:
property DatabaseFeatures.supports_primitives_in_json_field - added:
property DatabaseFeatures.test_collations
- removed:
property DatabaseIntrospection.data_types_reverse - added:
field DatabaseIntrospection.data_types_reverse
- removed:
method DatabaseOperations.adapt_decimalfield_value(value, max_digits=…, decimal_places=…) - added:
method DatabaseOperations.time_extract_sql(lookup_type, sql, params)
- added:
variable is_oracledb
- removed:
method DatabaseWrapper.ensure_role() - added:
class ServerSideCursor(CursorMixin, Database.client_cursor.ClientCursorMixin, Database.ServerCursor) - added:
method DatabaseWrapper.close_if_health_check_failed() - added:
method DatabaseWrapper.close_pool() - added:
property DatabaseWrapper.pool
- removed:
export SQLInsertCompiler - added:
class SQLInsertCompiler(BaseSQLInsertCompiler) - added:
method SQLInsertCompiler.assemble_as_sql(fields, value_rows)
- removed:
field DatabaseFeatures.create_test_table_with_composite_primary_key - removed:
field DatabaseFeatures.django_test_skips - removed:
field DatabaseFeatures.has_bit_xor - removed:
field DatabaseFeatures.supports_covering_spgist_indexes - removed:
property DatabaseFeatures.is_postgresql_13 - removed:
property DatabaseFeatures.is_postgresql_14 - added:
field DatabaseFeatures.insert_test_table_with_defaults - added:
field DatabaseFeatures.supports_frame_exclusion - added:
field DatabaseFeatures.supports_nulls_distinct_unique_constraints - added:
field DatabaseFeatures.supports_stored_generated_columns - added:
field DatabaseFeatures.supports_virtual_generated_columns - added:
property DatabaseFeatures.django_test_skips - added:
property DatabaseFeatures.is_postgresql_15 - added:
property DatabaseFeatures.is_postgresql_16 - added:
property DatabaseFeatures.is_postgresql_17
- removed:
method DatabaseOperations.adapt_decimalfield_value(value, max_digits=…, decimal_places=…) - added:
method DatabaseOperations.prepare_join_on_clause(lhs_table, lhs_field, rhs_table, rhs_field)
- added:
class Jsonb(Json) - added:
method Jsonb.getquoted()
- added:
field DatabaseWrapper.transaction_modes
- removed:
field DatabaseFeatures.can_alter_table_rename_column - removed:
field DatabaseFeatures.create_test_table_with_composite_primary_key - removed:
field DatabaseFeatures.requires_compound_order_by_subquery - removed:
field DatabaseFeatures.supports_order_by_nulls_modifier - removed:
property DatabaseFeatures.supports_atomic_references_rename - added:
field DatabaseFeatures.insert_test_table_with_defaults - added:
field DatabaseFeatures.supports_default_keyword_in_insert - added:
field DatabaseFeatures.supports_frame_exclusion - added:
field DatabaseFeatures.supports_stored_generated_columns - added:
field DatabaseFeatures.supports_tuple_lookups - added:
field DatabaseFeatures.supports_unlimited_charfield - added:
field DatabaseFeatures.supports_virtual_generated_columns
- removed:
method DatabaseOperations.bulk_insert_sql(fields, placeholder_rows) - added:
method DatabaseOperations.force_group_by()
- removed:
method DatabaseSchemaEditor.alter_db_table(model, old_db_table, new_db_table, disable_constraints=…) - removed:
method DatabaseSchemaEditor.alter_field(model, old_field, new_field, strict=…)
- added:
field CursorWrapper.APPS_NOT_READY_WARNING_MSG
- removed:
method MigrationAutodetector.generate_altered_index_together() - removed:
method MigrationAutodetector.generate_removed_altered_index_together() - added:
class OperationDependency(namedtuple('OperationDependency', 'app_label model_name field_name type')) - added:
class OperationDependency.Type(Enum) - added:
field OperationDependency.Type.ALTER - added:
field OperationDependency.Type.ALTER_FOO_TOGETHER - added:
field OperationDependency.Type.CREATE - added:
field OperationDependency.Type.REMOVE - added:
field OperationDependency.Type.REMOVE_ORDER_WRT - added:
method MigrationAutodetector.generate_altered_constraints() - added:
property OperationDependency.field_name_lower - added:
property OperationDependency.model_name_lower
- added:
export AlterConstraint
- added:
class OperationCategory(str, enum.Enum) - added:
field Operation.category - added:
field OperationCategory.ADDITION - added:
field OperationCategory.ALTERATION - added:
field OperationCategory.MIXED - added:
field OperationCategory.PYTHON - added:
field OperationCategory.REMOVAL - added:
field OperationCategory.SQL - added:
method Operation.formatted_description()
- added:
field AddField.category - added:
field AlterField.category - added:
field RemoveField.category - added:
field RenameField.category
- added:
class AlterConstraint(IndexOperation) - added:
constructor AlterConstraint(model_name, name, constraint) - added:
field AddConstraint.category - added:
field AddIndex.category - added:
field AlterConstraint.category - added:
field AlterConstraint.option_name - added:
field CreateModel.category - added:
field DeleteModel.category - added:
field ModelOptionOperation.category - added:
field RemoveConstraint.category - added:
field RemoveIndex.category - added:
field RenameIndex.category - added:
field RenameModel.category - added:
method AddConstraint.reduce(operation, app_label) - added:
method AddIndex.reduce(operation, app_label) - added:
method AlterConstraint.database_backwards(app_label, schema_editor, from_state, to_state) - added:
method AlterConstraint.database_forwards(app_label, schema_editor, from_state, to_state) - added:
method AlterConstraint.deconstruct() - added:
method AlterConstraint.describe() - added:
method AlterConstraint.reduce(operation, app_label) - added:
method AlterConstraint.state_forwards(app_label, state) - added:
property AlterConstraint.migration_name_fragment
- added:
field RunPython.category - added:
field RunSQL.category - added:
field SeparateDatabaseAndState.category
- changed:
class FrozensetSerializer(BaseSequenceSerializer) → class FrozensetSerializer(BaseUnorderedSequenceSerializer) - changed:
class SetSerializer(BaseSequenceSerializer) → class SetSerializer(BaseUnorderedSequenceSerializer) - added:
class BaseUnorderedSequenceSerializer(BaseSequenceSerializer) - added:
constructor BaseUnorderedSequenceSerializer(value) - added:
variable FUNCTION_TYPES
- added:
method ProjectState.alter_constraint(app_label, model_name, constraint_name, constraint)
- added:
export CompositePrimaryKey - added:
export GeneratedField - added:
export WindowFrameExclusion - added:
export aprefetch_related_objects
- added:
field Avg.arity - added:
field Count.allows_composite_expressions - added:
field Count.arity - added:
field Max.arity - added:
field Min.arity - added:
field StdDev.arity - added:
field Sum.arity - added:
field Variance.arity - added:
method Count.resolve_expression(*args, **kwargs)
- changed:
async method Model.arefresh_from_db(using=…, fields=…) → async method Model.arefresh_from_db(using=…, fields=…, from_queryset=…) - changed:
async method Model.asave(force_insert=…, force_update=…, using=…, update_fields=…) → async method Model.asave(*args, force_insert=…, force_update=…, using=…, update_fields=…) - changed:
method Model.refresh_from_db(using=…, fields=…) → method Model.refresh_from_db(using=…, fields=…, from_queryset=…) - changed:
method Model.save(force_insert=…, force_update=…, using=…, update_fields=…) → method Model.save(*args, force_insert=…, force_update=…, using=…, update_fields=…)
- changed:
constructor BaseConstraint(name, violation_error_message=…) → constructor BaseConstraint(*args, name=…, violation_error_code=…, violation_error_message=…) - changed:
constructor CheckConstraint(*, check, name, violation_error_message=…) → constructor CheckConstraint(*, name, condition=…, check=…, violation_error_code=…, violation_error_message=…) - changed:
constructor UniqueConstraint(*expressions, fields=…, name=…, condition=…, deferrable=…, include=…, opclasses=…, violation_error_message=…) → constructor UniqueConstraint(*expressions, fields=…, name=…, condition=…, deferrable=…, include=…, opclasses=…, nulls_distinct=…, violation_error_code=…, violation_error_message=…) - added:
field BaseConstraint.non_db_attrs - added:
field BaseConstraint.violation_error_code - added:
field CheckConstraint.check
- changed:
class IntegerChoices(int, Choices) → class IntegerChoices(Choices, IntEnum) - changed:
class TextChoices(str, Choices) → class TextChoices(Choices, StrEnum) - added:
field Choices.do_not_call_in_templates
- removed:
constructor ExpressionList(*expressions, **extra) - removed:
method Case.resolve_expression(query=…, allow_joins=…, reuse=…, summarize=…, for_save=…) - removed:
method Func.resolve_expression(query=…, allow_joins=…, reuse=…, summarize=…, for_save=…) - removed:
method OrderByList.as_sql(*args, **kwargs) - removed:
method OrderByList.get_group_by_cols() - removed:
variable NoneType - changed:
class OrderByList(Func) → class OrderByList(ExpressionList) - changed:
constructor WindowFrame(start=…, end=…) → constructor WindowFrame(start=…, end=…, exclusion=…) - added:
class ColPairs(Expression) - added:
class DatabaseDefault(Expression) - added:
class OutputFieldIsNoneError(FieldError) - added:
class Sliced(F) - added:
class WindowFrameExclusion(Enum) - added:
constructor ColPairs(alias, targets, sources, output_field) - added:
constructor DatabaseDefault(expression, output_field=…) - added:
constructor Sliced(obj, subscript) - added:
field BaseExpression.allowed_default - added:
field BaseExpression.allows_composite_expressions - added:
field BaseExpression.constraint_validation_compatible - added:
field BaseExpression.set_returning - added:
field F.allowed_default - added:
field OrderBy.allows_composite_expressions - added:
field OrderBy.constraint_validation_compatible - added:
field OrderByList.allowed_default - added:
field RawSQL.allowed_default - added:
field Value.allowed_default - added:
field WindowFrameExclusion.CURRENT_ROW - added:
field WindowFrameExclusion.GROUP - added:
field WindowFrameExclusion.NO_OTHERS - added:
field WindowFrameExclusion.TIES - added:
method BaseExpression.get_expression_for_validation() - added:
method ColPairs.as_sql(compiler, connection) - added:
method ColPairs.get_cols() - added:
method ColPairs.get_source_expressions() - added:
method ColPairs.relabeled_clone(relabels) - added:
method ColPairs.resolve_expression(*args, **kwargs) - added:
method ColPairs.select_format(compiler, sql, params) - added:
method ColPairs.set_source_expressions(exprs) - added:
method DatabaseDefault.as_sql(compiler, connection) - added:
method DatabaseDefault.get_source_expressions() - added:
method DatabaseDefault.resolve_expression(query=…, allow_joins=…, reuse=…, summarize=…, for_save=…) - added:
method DatabaseDefault.set_source_expressions(exprs) - added:
method Exists.as_sql(compiler, *args, **kwargs) - added:
method ExpressionList.as_sql(*args, **kwargs) - added:
method Sliced.resolve_expression(query=…, allow_joins=…, reuse=…, summarize=…, for_save=…) - added:
method WindowFrame.get_exclusion() - added:
property Case.allowed_default - added:
property CombinedExpression.allowed_default - added:
property ExpressionWrapper.allowed_default - added:
property Func.allowed_default - added:
property When.allowed_default
- removed:
field Field.flatchoices - removed:
method DecimalField.get_db_prep_save(value, connection) - changed:
constructor Field(verbose_name=…, name=…, primary_key=…, max_length=…, unique=…, blank=…, null=…, db_index=…, rel=…, default=…, editable=…, serialize=…, unique_for_date=…, unique_for_month=…, unique_for_year=…, choices=…, help_text=…, db_column=…, db_tablespace=…, auto_created=…, validators=…, error_messages=…, db_comment=…) → constructor Field(verbose_name=…, name=…, primary_key=…, max_length=…, unique=…, blank=…, null=…, db_index=…, rel=…, default=…, editable=…, serialize=…, unique_for_date=…, unique_for_month=…, unique_for_year=…, choices=…, help_text=…, db_column=…, db_tablespace=…, auto_created=…, validators=…, error_messages=…, db_comment=…, db_default=…) - added:
field Field.generated - added:
method CharField.slice_expression(expression, start, length) - added:
method DecimalField.get_db_prep_value(value, connection, prepared=…) - added:
method Field.has_db_default() - added:
method Field.slice_expression(expression, start, length) - added:
method TextField.slice_expression(expression, start, length) - added:
property Field.choices - added:
property Field.flatchoices
- added:
class AttributeSetter - added:
class CompositeAttribute - added:
class CompositePrimaryKey(Field) - added:
constructor AttributeSetter(name, value) - added:
constructor CompositeAttribute(field) - added:
constructor CompositePrimaryKey(*args, **kwargs) - added:
field CompositePrimaryKey.descriptor_class - added:
function unnest(fields) - added:
method CompositePrimaryKey.contribute_to_class(cls, name, private_only=…) - added:
method CompositePrimaryKey.deconstruct() - added:
method CompositePrimaryKey.get_attname_column() - added:
method CompositePrimaryKey.get_col(alias, output_field=…) - added:
method CompositePrimaryKey.get_pk_value_on_save(instance) - added:
method CompositePrimaryKey.to_python(value) - added:
method CompositePrimaryKey.value_to_string(obj) - added:
property CompositeAttribute.attnames - added:
property CompositePrimaryKey.cached_col - added:
property CompositePrimaryKey.columns - added:
property CompositePrimaryKey.fields
- added:
class GeneratedField(Field) - added:
constructor GeneratedField(*, expression, output_field, db_persist=…, **kwargs) - added:
field GeneratedField.db_returning - added:
field GeneratedField.generated - added:
field GeneratedField.output_field - added:
method GeneratedField.check(**kwargs) - added:
method GeneratedField.contribute_to_class(*args, **kwargs) - added:
method GeneratedField.db_parameters(connection) - added:
method GeneratedField.db_type_parameters(connection) - added:
method GeneratedField.deconstruct() - added:
method GeneratedField.generated_sql(connection) - added:
method GeneratedField.get_col(alias, output_field=…) - added:
method GeneratedField.get_internal_type() - added:
property GeneratedField.cached_col
- added:
property FieldCacheMixin.cache_name
- removed:
method RelatedField.get_cache_name() - added:
method ForeignKey.cast_db_type(connection) - added:
method ForeignObject.get_joining_fields(reverse_join=…) - added:
method ForeignObject.get_reverse_joining_fields() - added:
property RelatedField.cache_name
- added:
method ForwardManyToOneDescriptor.get_prefetch_querysets(instances, querysets=…) - added:
method ReverseOneToOneDescriptor.get_prefetch_querysets(instances, querysets=…)
- removed:
class MultiColSource - removed:
constructor MultiColSource(alias, targets, sources, field) - removed:
field MultiColSource.contains_aggregate - removed:
field MultiColSource.contains_over_clause - removed:
method MultiColSource.get_lookup(lookup) - removed:
method MultiColSource.relabeled_clone(relabels) - removed:
method MultiColSource.resolve_expression(*args, **kwargs)
- removed:
method ForeignObjectRel.get_cache_name() - removed:
method ForeignObjectRel.is_hidden() - added:
method ForeignObjectRel.get_joining_fields() - added:
property ForeignObjectRel.accessor_name - added:
property ForeignObjectRel.cache_name
- added:
class Tuple(Func) - added:
class TupleExact(TupleLookupMixin, Exact) - added:
class TupleGreaterThan(TupleLookupMixin, GreaterThan) - added:
class TupleGreaterThanOrEqual(TupleLookupMixin, GreaterThanOrEqual) - added:
class TupleIn(TupleLookupMixin, In) - added:
class TupleIsNull(TupleLookupMixin, IsNull) - added:
class TupleLessThan(TupleLookupMixin, LessThan) - added:
class TupleLessThanOrEqual(TupleLookupMixin, LessThanOrEqual) - added:
class TupleLookupMixin - added:
field Tuple.allows_composite_expressions - added:
field Tuple.function - added:
field Tuple.output_field - added:
field TupleLookupMixin.allows_composite_expressions - added:
method TupleExact.get_fallback_sql(compiler, connection) - added:
method TupleGreaterThan.get_fallback_sql(compiler, connection) - added:
method TupleGreaterThanOrEqual.get_fallback_sql(compiler, connection) - added:
method TupleIn.check_rhs_elements_length_equals_lhs_length() - added:
method TupleIn.check_rhs_is_collection_of_tuples_or_lists() - added:
method TupleIn.check_rhs_is_query() - added:
method TupleIn.get_fallback_sql(compiler, connection) - added:
method TupleIn.get_prep_lookup() - added:
method TupleIn.process_rhs(compiler, connection) - added:
method TupleIsNull.as_sql(compiler, connection) - added:
method TupleIsNull.get_prep_lookup() - added:
method TupleLessThan.get_fallback_sql(compiler, connection) - added:
method TupleLessThanOrEqual.get_fallback_sql(compiler, connection) - added:
method TupleLookupMixin.as_sql(compiler, connection) - added:
method TupleLookupMixin.check_rhs_is_supported_expression() - added:
method TupleLookupMixin.check_rhs_is_tuple_or_list() - added:
method TupleLookupMixin.check_rhs_length_equals_lhs_length() - added:
method TupleLookupMixin.get_fallback_sql(compiler, connection) - added:
method TupleLookupMixin.get_lhs_str() - added:
method TupleLookupMixin.get_prep_lhs() - added:
method TupleLookupMixin.get_prep_lookup() - added:
method TupleLookupMixin.process_lhs(compiler, connection, lhs=…) - added:
method TupleLookupMixin.process_rhs(compiler, connection) - added:
variable tuple_lookups
- added:
export JSONArray
- removed:
class JSONObject(Func) - removed:
constructor JSONObject(**fields) - removed:
field JSONObject.function - removed:
field JSONObject.output_field - removed:
method JSONObject.as_oracle(compiler, connection, **extra_context) - removed:
method JSONObject.as_postgresql(compiler, connection, **extra_context) - removed:
method JSONObject.as_sql(compiler, connection, **extra_context) - added:
field Collate.allowed_default
- changed:
constructor Trunc(expression, kind, output_field=…, tzinfo=…, is_dst=…, **extra) → constructor Trunc(expression, kind, output_field=…, tzinfo=…, **extra) - changed:
constructor TruncBase(expression, output_field=…, tzinfo=…, is_dst=…, **extra) → constructor TruncBase(expression, output_field=…, tzinfo=…, **extra) - added:
method Now.as_oracle(compiler, connection, **extra_context)
- added:
class JSONArray(Func) - added:
class JSONObject(Func) - added:
constructor JSONObject(**fields) - added:
field JSONArray.function - added:
field JSONArray.output_field - added:
field JSONObject.function - added:
field JSONObject.output_field - added:
method JSONArray.as_native(compiler, connection, *, returning, **extra_context) - added:
method JSONArray.as_oracle(compiler, connection, **extra_context) - added:
method JSONArray.as_postgresql(compiler, connection, **extra_context) - added:
method JSONArray.as_sql(compiler, connection, **extra_context) - added:
method JSONObject.as_native(compiler, connection, *, returning, **extra_context) - added:
method JSONObject.as_oracle(compiler, connection, **extra_context) - added:
method JSONObject.as_postgresql(compiler, connection, **extra_context) - added:
method JSONObject.as_sql(compiler, connection, **extra_context) - added:
method JSONObject.join(args)
- removed:
method ConcatPair.as_sqlite(compiler, connection, **extra_context) - added:
field Chr.output_field - added:
field ConcatPair.as_sqlite - added:
method ConcatPair.pipes_concat_sql(compiler, connection, **extra_context)
- changed:
class IntegerGreaterThanOrEqual(IntegerFieldFloatRounding, GreaterThanOrEqual) → class IntegerGreaterThanOrEqual(IntegerFieldOverflow, IntegerFieldFloatRounding, GreaterThanOrEqual) - changed:
class IntegerLessThan(IntegerFieldFloatRounding, LessThan) → class IntegerLessThan(IntegerFieldOverflow, IntegerFieldFloatRounding, LessThan) - added:
class IntegerFieldExact(IntegerFieldOverflow, Exact) - added:
class IntegerFieldOverflow - added:
class IntegerGreaterThan(IntegerFieldOverflow, GreaterThan) - added:
class IntegerLessThanOrEqual(IntegerFieldOverflow, LessThanOrEqual) - added:
field IntegerFieldOverflow.overflow_exception - added:
field IntegerFieldOverflow.underflow_exception - added:
field IntegerGreaterThan.underflow_exception - added:
field IntegerGreaterThanOrEqual.underflow_exception - added:
field IntegerLessThan.overflow_exception - added:
field IntegerLessThanOrEqual.overflow_exception - added:
method IntegerFieldOverflow.process_rhs(compiler, connection) - added:
property Lookup.allowed_default
- added:
method Options.setting_changed(*, setting, **kwargs) - added:
property Options.all_parents - added:
property Options.is_composite_pk - added:
property Options.pk_fields
- changed:
async method QuerySet.aupdate_or_create(defaults=…, **kwargs) → async method QuerySet.aupdate_or_create(defaults=…, create_defaults=…, **kwargs) - changed:
method QuerySet.datetimes(field_name, kind, order=…, tzinfo=…, is_dst=…) → method QuerySet.datetimes(field_name, kind, order=…, tzinfo=…) - changed:
method QuerySet.update_or_create(defaults=…, **kwargs) → method QuerySet.update_or_create(defaults=…, create_defaults=…, **kwargs) - added:
async function aprefetch_related_objects(model_instances, *related_lookups) - added:
method Prefetch.get_current_querysets(level)
- changed:
function select_related_descend(field, restricted, requested, select_mask, reverse=…) → function select_related_descend(field, restricted, requested, select_mask) - changed:
method FilteredRelation.resolve_expression(*args, **kwargs) → method FilteredRelation.resolve_expression(query, reuse, *args, **kwargs) - added:
method FilteredRelation.relabeled_clone(change_map) - added:
method Q.replace_expressions(replacements) - added:
property Q.identity - added:
property Q.referenced_base_fields
- removed:
method SQLCompiler.as_subquery_condition(alias, columns, compiler) - changed:
method SQLInsertCompiler.field_as_sql(field, val) → method SQLInsertCompiler.field_as_sql(field, get_placeholder, val) - added:
method SQLCompiler.composite_fields_to_tuples(rows, expressions) - added:
method SQLCompiler.has_composite_fields(expressions)
- added:
variable ROW_COUNT
- removed:
method BaseTable.equals(other) - removed:
method Join.equals(other)
- removed:
field Query.has_select_fields - removed:
method Query.build_filtered_relation_q(q_object, reuse, branch_negated=…, current_negated=…) - changed:
method Query.add_q(q_object) → method Query.add_q(q_object, reuse_all=…) - changed:
method Query.build_filter(filter_expr, branch_negated=…, current_negated=…, can_reuse=…, allow_joins=…, split_subq=…, reuse_with_filtered_relation=…, check_filterable=…, summarize=…) → method Query.build_filter(filter_expr, branch_negated=…, current_negated=…, can_reuse=…, allow_joins=…, split_subq=…, check_filterable=…, summarize=…, update_join_types=…) - changed:
method Query.join(join, reuse=…, reuse_with_filtered_relation=…) → method Query.join(join, reuse=…) - changed:
method Query.setup_joins(names, opts, alias, can_reuse=…, allow_many=…, reuse_with_filtered_relation=…) → method Query.setup_joins(names, opts, alias, can_reuse=…, allow_many=…) - changed:
method Query.try_transform(lhs, name) → method Query.try_transform(lhs, name, lookups=…) - added:
field Query.selected - added:
property Query.has_select_fields
- removed:
class SubqueryConstraint - removed:
constructor SubqueryConstraint(alias, columns, targets, query_object) - removed:
field SubqueryConstraint.contains_aggregate - removed:
field SubqueryConstraint.contains_over_clause - removed:
method SubqueryConstraint.as_sql(compiler, connection)
- added:
async method Signal.asend(sender, **named) - added:
async method Signal.asend_robust(sender, **named)
- changed:
class BoundField → class BoundField(RenderableFieldMixin) - added:
method BoundField.get_context() - added:
property BoundField.aria_describedby - added:
property BoundField.template_name
- removed:
field ChoiceField.choices - changed:
constructor Field(*, required=…, widget=…, label=…, initial=…, help_text=…, error_messages=…, show_hidden_initial=…, validators=…, localize=…, disabled=…, label_suffix=…) → constructor Field(*, required=…, widget=…, label=…, initial=…, help_text=…, error_messages=…, show_hidden_initial=…, validators=…, localize=…, disabled=…, label_suffix=…, template_name=…, bound_field_class=…) - changed:
constructor URLField(**kwargs) → constructor URLField(*, assume_scheme=…, **kwargs) - added:
field Field.bound_field_class - added:
property ChoiceField.choices
- changed:
constructor BaseForm(data=…, files=…, auto_id=…, prefix=…, initial=…, error_class=…, label_suffix=…, empty_permitted=…, field_order=…, use_required_attribute=…, renderer=…) → constructor BaseForm(data=…, files=…, auto_id=…, prefix=…, initial=…, error_class=…, label_suffix=…, empty_permitted=…, field_order=…, use_required_attribute=…, renderer=…, bound_field_class=…) - added:
field BaseForm.bound_field_class
- changed:
function fields_for_model(model, fields=…, exclude=…, widgets=…, formfield_callback=…, localized_fields=…, labels=…, help_texts=…, error_messages=…, field_classes=…, *, apply_limit_choices_to=…) → function fields_for_model(model, fields=…, exclude=…, widgets=…, formfield_callback=…, localized_fields=…, labels=…, help_texts=…, error_messages=…, field_classes=…, *, apply_limit_choices_to=…, form_declared_fields=…) - changed:
method BaseModelFormSet.save_existing(form, instance, commit=…) → method BaseModelFormSet.save_existing(form, obj, commit=…) - added:
method ModelChoiceField.validate_no_null_characters(value)
- removed:
field DjangoDivFormRenderer.form_template_name - removed:
field DjangoDivFormRenderer.formset_template_name - removed:
field Jinja2DivFormRenderer.form_template_name - removed:
field Jinja2DivFormRenderer.formset_template_name - added:
constructor DjangoDivFormRenderer(*args, **kwargs) - added:
constructor Jinja2DivFormRenderer(*args, **kwargs) - added:
field BaseRenderer.bound_field_class - added:
field BaseRenderer.field_template_name
- removed:
variable DEFAULT_TEMPLATE_DEPRECATION_MSG - changed:
constructor ErrorList(initlist=…, error_class=…, renderer=…) → constructor ErrorList(initlist=…, error_class=…, renderer=…, field_id=…) - added:
class RenderableFieldMixin(RenderableMixin) - added:
method RenderableFieldMixin.as_field_group() - added:
method RenderableFieldMixin.as_hidden() - added:
method RenderableFieldMixin.as_widget()
- added:
class ColorInput(Input) - added:
class Script(MediaAsset) - added:
class SearchInput(Input) - added:
class TelInput(Input) - added:
constructor Script(src, **attributes) - added:
field ClearableFileInput.checked - added:
field ColorInput.input_type - added:
field ColorInput.template_name - added:
field Script.element_template - added:
field SearchInput.input_type - added:
field SearchInput.template_name - added:
field TelInput.input_type - added:
field TelInput.template_name
- removed:
function parse_accept_header(header) - removed:
property MediaType.is_all_types - added:
method HttpRequest.accepted_type(media_type) - added:
method HttpRequest.get_preferred_type(media_types) - added:
property HttpRequest.accepted_types_by_precedence - added:
property MediaType.quality - added:
property MediaType.range_params - added:
property MediaType.specificity
- changed:
constructor HttpResponseRedirectBase(redirect_to, *args, **kwargs) → constructor HttpResponseRedirectBase(redirect_to, preserve_request=…, *args, **kwargs) - added:
field HttpResponsePermanentRedirect.status_code_preserve_request - added:
field HttpResponseRedirect.status_code_preserve_request - added:
property HttpResponse.text - added:
property StreamingHttpResponse.text
- changed:
function redirect(to, *args, permanent=…, **kwargs) → function redirect(to, *args, permanent=…, preserve_request=…, **kwargs) - added:
async function aget_list_or_404(klass, *args, **kwargs) - added:
async function aget_object_or_404(klass, *args, **kwargs)
- added:
method BaseEngine.check(**kwargs)
- added:
method DjangoTemplates.check(**kwargs)
- removed:
function length_is(value, arg) - added:
function escapeseq(value)
- added:
function querystring(context, query_dict=…, **kwargs)
- added:
class SimpleBlockNode(SimpleNode) - added:
constructor SimpleBlockNode(nodelist, *args, **kwargs) - added:
method Library.simple_block_tag(func=…, takes_context=…, name=…, end_name=…) - added:
method SimpleBlockNode.get_resolved_arguments(context)
- changed:
function construct_relative_path(current_template_name, relative_name) → function construct_relative_path(current_template_name, relative_name, allow_recursion=…)
- removed:
class UnknownTimezoneException(BaseException) - removed:
function timezone_constructor(tzname)
- changed:
function reverse(viewname, urlconf=…, args=…, kwargs=…, current_app=…) → function reverse(viewname, urlconf=…, args=…, kwargs=…, current_app=…, *, query=…, fragment=…)
- removed:
function get_converter(raw_converter)
- removed:
constructor LocaleRegexDescriptor(attr) - added:
class LocaleRegexRouteDescriptor - added:
variable whitespace_set
- removed:
class aclosing(AbstractAsyncContextManager) - removed:
constructor aclosing(thing)
- removed:
class BaseConverter - removed:
constructor BaseConverter(digits, sign=…) - removed:
field BaseConverter.decimal_digits - removed:
method BaseConverter.convert(number, from_digits, to_digits, sign) - removed:
method BaseConverter.decode(s) - removed:
method BaseConverter.encode(i) - removed:
variable BASE16_ALPHABET - removed:
variable BASE2_ALPHABET - removed:
variable BASE36_ALPHABET - removed:
variable BASE56_ALPHABET - removed:
variable BASE62_ALPHABET - removed:
variable BASE64_ALPHABET - removed:
variable base16 - removed:
variable base2 - removed:
variable base36 - removed:
variable base56 - removed:
variable base62 - removed:
variable base64
- added:
class BaseChoiceIterator - added:
class BlankChoiceIterator(BaseChoiceIterator) - added:
class CallableChoiceIterator(BaseChoiceIterator) - added:
constructor BlankChoiceIterator(choices, blank_choice) - added:
constructor CallableChoiceIterator(func) - added:
function flatten_choices(choices) - added:
function normalize_choices(value, *, depth=…)
- removed:
function md5(data=…, *, usedforsecurity=…) - removed:
function new_hash(hash_algorithm, *, usedforsecurity=…) - removed:
variable md5 - removed:
variable new_hash
- removed:
class date(real_date) - removed:
class datetime(real_datetime) - removed:
function new_date(d) - removed:
function new_datetime(d) - removed:
function strftime(dt, fmt) - removed:
method date.strftime(fmt) - removed:
method datetime.date() - removed:
method datetime.strftime(fmt) - removed:
static method datetime.combine(date, time)
- removed:
class DeprecationInstanceCheck(type) - removed:
class RemovedInDjango50Warning(DeprecationWarning) - removed:
class RemovedInDjango51Warning(PendingDeprecationWarning) - added:
class RemovedInDjango60Warning(DeprecationWarning) - added:
class RemovedInDjango61Warning(PendingDeprecationWarning)
- removed:
constructor DjangoUnicodeDecodeError(obj, *args)
- changed:
constructor SyndicationFeed(title, link, description, language=…, author_email=…, author_name=…, author_link=…, subtitle=…, categories=…, feed_url=…, feed_copyright=…, feed_guid=…, ttl=…, **kwargs) → constructor SyndicationFeed(title, link, description, language=…, author_email=…, author_name=…, author_link=…, subtitle=…, categories=…, feed_url=…, feed_copyright=…, feed_guid=…, ttl=…, stylesheets=…, **kwargs) - added:
class Stylesheet - added:
constructor Stylesheet(url, mimetype=…, media=…) - added:
method RssFeed.add_stylesheets(handler) - added:
method SyndicationFeed.add_stylesheets(handler) - added:
property Stylesheet.mimetype - added:
property Stylesheet.url
- changed:
constructor cached_property(func, name=…) → constructor cached_property(func)
- added:
variable VOID_ELEMENTS
- added:
function lazy_annotations() - added:
function signature(obj) - added:
variable ARG_KINDS - added:
variable lock - added:
variable safe_signature_from_callable
- removed:
class JsLexer(Lexer) - removed:
class Lexer - removed:
class Tok - removed:
constructor JsLexer() - removed:
constructor Lexer(states, first) - removed:
constructor Tok(name, regex, next=…) - removed:
field JsLexer.both_after - removed:
field JsLexer.both_before - removed:
field JsLexer.states - removed:
field Tok.num - removed:
function literals(choices, prefix=…, suffix=…) - removed:
function prepare_js_for_gettext(js) - removed:
method Lexer.lex(text)
- removed:
class FakeMatch - removed:
class WordsRegex - removed:
constructor FakeMatch(text, end) - removed:
field Truncator.MAX_LENGTH_HTML - removed:
method FakeMatch.end(group=…) - removed:
method Truncator.add_truncation_text(text, truncate=…) - removed:
static method WordsRegex.search(text, pos) - removed:
variable re_chars - removed:
variable re_notag - removed:
variable re_prt - removed:
variable re_tag - removed:
variable re_words - added:
class TruncateCharsHTMLParser(TruncateHTMLParser) - added:
class TruncateHTMLParser(HTMLParser) - added:
class TruncateHTMLParser.TruncationCompleted(Exception) - added:
class TruncateWordsHTMLParser(TruncateHTMLParser) - added:
constructor TruncateCharsHTMLParser(*, length, replacement, convert_charrefs=…) - added:
constructor TruncateHTMLParser(*, length, replacement, convert_charrefs=…) - added:
function add_truncation_text(text, truncate=…) - added:
function calculate_truncate_chars_length(length, replacement) - added:
method TruncateCharsHTMLParser.process(data) - added:
method TruncateHTMLParser.feed(data) - added:
method TruncateHTMLParser.handle_data(data) - added:
method TruncateHTMLParser.handle_endtag(tag) - added:
method TruncateHTMLParser.handle_startendtag(tag, attrs) - added:
method TruncateHTMLParser.handle_starttag(tag, attrs) - added:
method TruncateWordsHTMLParser.process(data) - added:
property TruncateHTMLParser.void_elements
- changed:
function make_aware(value, timezone=…, is_dst=…) → function make_aware(value, timezone=…)
- removed:
class CyclicDependencyError(ValueError) - removed:
function stable_topological_sort(nodes, dependency_graph) - removed:
function topological_sort_as_sets(dependency_graph)
- added:
function translation_catalog_exists(lang_code)
- removed:
variable PY36 - removed:
variable PY37 - added:
variable PY313 - added:
variable PY314 - added:
variable PYPY
- removed:
variable CSRF_FAILURE_TEMPLATE - added:
function builtin_template_path(name)
- added:
variable coroutine_functions_to_sensitive_variables
- removed:
function vary_on_cookie(func) - added:
variable vary_on_cookie
- removed:
class DeleteViewCustomDeleteWarning(Warning) - removed:
constructor BaseDeleteView(*args, **kwargs)
- removed:
variable js_catalog_template - added:
function builtin_template_path(name)
- removed:
variable DEFAULT_DIRECTORY_INDEX_TEMPLATE - added:
function builtin_template_path(name)