Upgrading Django 3 to 4
Unknown3.2.25 → 4.2.30Security55
SecurityMedium · 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.GHSA-5mf9-h53q-7mhq · CVE-2026-33033 ↗
UnknownUpgrade verdict
DepDelta hasn't looked for this range's notes in its newest sources yet, so breaking changes can't be ruled out.
In plain terms
- DepDelta hasn't finished looking for the notes in this range, so it can't rule out breaking changes yet.
- Their commits are listed with this comparison.
Must act Top 3 of 55 that need code or config changes
Python requirement changed in 4.0a1: >=3.6 → >=3.8.
Drops pytz.
Installs 2 packages in all (was 3).
What you must change
Security55
An 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.
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.
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.
Low · CVSS 2.7Django vulnerable to Uncontrolled Resource Consumption
High · CVSS 7.5Django has a Race Condition vulnerability
Low · CVSS 3.7An 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 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.
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.
High · CVSS 7.5An 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.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.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. 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.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.)
Django allows enumeration of user e-mail addresses
Low · CVSS 3.7An 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.
An 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. 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 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. 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 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.)
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.
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.
An issue was discovered in Django 3.2 before 3.2.23, 4.1 before 4.1.13, and 4.2 before 4.2.7. The NFKC normalization is slow on Windows. As a consequence, django.contrib.auth.forms.UsernameField is subject to a potential DoS (denial of service) attack via certain inputs with a very large number of Unicode characters.
In Django 3.2 before 3.2.22, 4.1 before 4.1.12, and 4.2 before 4.2.6, the django.utils.text.Truncator chars() and words() methods (when used with html=True) are subject to a potential DoS (denial of service) attack via certain inputs with very long, potentially malformed HTML text. The chars() and words() methods are used to implement the truncatechars_html and truncatewords_html template filters, which are thus also vulnerable. NOTE: this issue exists because of an incomplete fix for CVE-2019-14232.
In Django 3.2 before 3.2.21, 4.1 before 4.1.11, and 4.2 before 4.2.5, django.utils.encoding.uri_to_iri() is subject to a potential DoS (denial of service) attack via certain inputs with a very large number of Unicode characters.
In Django 3.2 before 3.2.20, 4 before 4.1.10, and 4.2 before 4.2.3, EmailValidator and URLValidator are subject to a potential ReDoS (regular expression denial of service) attack via a very large number of domain name labels of emails and URLs.
In Django 3.2 before 3.2.19, 4.x before 4.1.9, and 4.2 before 4.2.1, it was possible to bypass validation when using one form field to upload multiple files. This multiple upload has never been supported by forms.FileField or forms.ImageField (only the last uploaded file was validated). However, Django's "Uploading multiple files" documentation suggested otherwise.
An issue was discovered in the Multipart Request Parser in Django 3.2 before 3.2.18, 4.0 before 4.0.10, and 4.1 before 4.1.7. Passing certain inputs (e.g., an excessive number of parts) to multipart forms could result in too many open files or memory exhaustion, and provided a potential vector for a denial-of-service attack.
In Django 3.2 before 3.2.17, 4.0 before 4.0.9, and 4.1 before 4.1.6, the parsed values of Accept-Language headers are cached in order to avoid repetitive parsing. This leads to a potential denial-of-service vector via excessive memory usage if the raw value of Accept-Language headers is very large.
In Django 3.2 before 3.2.16, 4.0 before 4.0.8, and 4.1 before 4.1.2, internationalized URLs were subject to a potential denial of service attack via the locale parameter, which is treated as a regular expression.
An issue was discovered in the HTTP FileResponse class in Django 3.2 before 3.2.15 and 4.0 before 4.0.7. An application is vulnerable to a reflected file download (RFD) attack that sets the Content-Disposition header of a FileResponse when the filename is derived from user-supplied input.
An issue was discovered in Django 3.2 before 3.2.14 and 4.0 before 4.0.6. The Trunc() and Extract() database functions are subject to SQL injection if untrusted data is used as a kind/lookup_name value. Applications that constrain the lookup name and kind choice to a known safe list are unaffected.
An issue was discovered in Django 2.2 before 2.2.28, 3.2 before 3.2.13, and 4.0 before 4.0.4. QuerySet.annotate(), aggregate(), and extra() methods are subject to SQL injection in column aliases via a crafted dictionary (with dictionary expansion) as the passed **kwargs.
A SQL injection issue was discovered in QuerySet.explain() in Django 2.2 before 2.2.28, 3.2 before 3.2.13, and 4.0 before 4.0.4. This occurs by passing a crafted dictionary (with dictionary expansion) as the **options argument, and placing the injection payload in an option name.
The {% debug %} template tag in Django 2.2 before 2.2.27, 3.2 before 3.2.12, and 4.0 before 4.0.2 does not properly encode the current context. This may lead to XSS.
An issue was discovered in MultiPartParser in Django 2.2 before 2.2.27, 3.2 before 3.2.12, and 4.0 before 4.0.2. Passing certain inputs to multipart forms could result in an infinite loop when parsing files.
An issue was discovered in Django 2.2 before 2.2.26, 3.2 before 3.2.11, and 4.0 before 4.0.1. UserAttributeSimilarityValidator incurred significant overhead in evaluating a submitted password that was artificially large in relation to the comparison values. In a situation where access to user registration was unrestricted, this provided a potential vector for a denial-of-service attack.
Storage.save in Django 2.2 before 2.2.26, 3.2 before 3.2.11, and 4.0 before 4.0.1 allows directory traversal if crafted filenames are directly passed to it.
An issue was discovered in Django 2.2 before 2.2.26, 3.2 before 3.2.11, and 4.0 before 4.0.1. Due to leveraging the Django Template Language's variable resolution logic, the dictsort template filter was potentially vulnerable to information disclosure, or an unintended method call, if passed a suitably crafted key.
API changes
Generated by DepDelta from published Python source. Not mixed with prose notes.
- removed:
export RemovedInDjango40Warning - removed:
property LazySettings.PASSWORD_RESET_TIMEOUT_DAYS - removed:
variable DEFAULT_HASHING_ALGORITHM_DEPRECATED_MSG - removed:
variable PASSWORD_RESET_TIMEOUT_DAYS_DEPRECATED_MSG - added:
export RemovedInDjango50Warning - added:
export RemovedInDjango51Warning - added:
property LazySettings.DEFAULT_FILE_STORAGE - added:
property LazySettings.STATICFILES_STORAGE - added:
property LazySettings.USE_L10N - added:
variable CSRF_COOKIE_MASKED_DEPRECATED_MSG - added:
variable DEFAULT_FILE_STORAGE_DEPRECATED_MSG - added:
variable DEFAULT_STORAGE_ALIAS - added:
variable STATICFILES_STORAGE_ALIAS - added:
variable STATICFILES_STORAGE_DEPRECATED_MSG - added:
variable USE_DEPRECATED_PYTZ_DEPRECATED_MSG - added:
variable USE_L10N_DEPRECATED_MSG
- removed:
variable DEFAULT_HASHING_ALGORITHM - removed:
variable PASSWORD_RESET_TIMEOUT_DAYS - removed:
variable SECURE_BROWSER_XSS_FILTER - added:
variable CSRF_COOKIE_MASKED - added:
variable SECRET_KEY_FALLBACKS - added:
variable SECURE_CROSS_ORIGIN_OPENER_POLICY - added:
variable STORAGES - added:
variable USE_DEPRECATED_PYTZ
- added:
variable DATETIME_FORMAT - added:
variable DATE_FORMAT - added:
variable DECIMAL_SEPARATOR - added:
variable FIRST_DAY_OF_WEEK - added:
variable MONTH_DAY_FORMAT - 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 TIME_INPUT_FORMATS
- 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
- removed:
function url(regex, view, kwargs=…, name=…)
- added:
field FieldListFilter.list_separator
- removed:
method InlineAdminForm.ordering_field() - removed:
property InlineAdminFormSet.non_form_errors - added:
method InlineAdminFormSet.non_form_errors() - added:
property AdminForm.fields - added:
property AdminForm.is_bound - added:
property InlineAdminFormSet.is_bound - added:
property InlineAdminFormSet.total_form_count
- changed:
method ModelAdmin.log_addition(request, object, message) → method ModelAdmin.log_addition(request, obj, message) - changed:
method ModelAdmin.log_change(request, object, message) → method ModelAdmin.log_change(request, obj, message) - changed:
method ModelAdmin.log_deletion(request, object, object_repr) → method ModelAdmin.log_deletion(request, obj, object_repr) - added:
field ModelAdmin.search_help_text - added:
method ModelAdmin.get_formset_kwargs(request, obj, inline, prefix)
- changed:
method AdminSite.get_app_list(request) → method AdminSite.get_app_list(request, app_label=…)
- removed:
function lookup_needs_distinct(opts, lookup_path) - changed:
function prepare_lookup_value(key, value) → function prepare_lookup_value(key, value, separator=…) - added:
function lookup_spawns_duplicates(opts, lookup_path)
- added:
method AutocompleteJsonView.serialize_result(obj, to_field_name)
- removed:
variable ORDER_TYPE_VAR - changed:
constructor ChangeList(request, model, list_display, list_display_links, list_filter, date_hierarchy, search_fields, list_select_related, list_per_page, list_max_show_all, list_editable, model_admin, sortable_by) → constructor ChangeList(request, model, list_display, list_display_links, list_filter, date_hierarchy, search_fields, list_select_related, list_per_page, list_max_show_all, list_editable, model_admin, sortable_by, search_help_text)
- removed:
class AdminDateWidget.Media - removed:
class AdminTimeWidget.Media - removed:
constructor AdminDateWidget(attrs=…, format=…) - removed:
constructor AdminTimeWidget(attrs=…, format=…) - removed:
field AdminDateWidget.Media.js - removed:
field AdminTimeWidget.Media.js - changed:
class AdminDateWidget(forms.DateInput) → class AdminDateWidget(BaseAdminDateWidget) - changed:
class AdminTimeWidget(forms.TimeInput) → class AdminTimeWidget(BaseAdminTimeWidget) - added:
class BaseAdminDateWidget(forms.DateInput) - added:
class BaseAdminDateWidget.Media - added:
class BaseAdminTimeWidget(forms.TimeInput) - added:
class BaseAdminTimeWidget.Media - added:
constructor BaseAdminDateWidget(attrs=…, format=…) - added:
constructor BaseAdminTimeWidget(attrs=…, format=…) - added:
field AdminDateWidget.template_name - added:
field AdminTimeWidget.template_name - added:
field BaseAdminDateWidget.Media.js - added:
field BaseAdminTimeWidget.Media.js - added:
function get_select2_language()
- added:
function remove_non_capturing_groups(pattern) - added:
function replace_metacharacters(pattern) - added:
variable non_capturing_group_matcher
- changed:
method RemoteUserBackend.configure_user(request, user) → method RemoteUserBackend.configure_user(request, user, created=…)
- added:
method AbstractBaseUser.get_session_auth_fallback_hash()
- removed:
class UserCreationForm.Meta - removed:
constructor UserCreationForm(*args, **kwargs) - removed:
field UserCreationForm.Meta.field_classes - removed:
field UserCreationForm.Meta.fields - removed:
field UserCreationForm.Meta.model - removed:
field UserCreationForm.error_messages - removed:
field UserCreationForm.password1 - removed:
field UserCreationForm.password2 - removed:
method UserCreationForm.clean_password2() - removed:
method UserCreationForm.save(commit=…) - changed:
class UserCreationForm(forms.ModelForm) → class UserCreationForm(BaseUserCreationForm) - added:
class BaseUserCreationForm(forms.ModelForm) - added:
class BaseUserCreationForm.Meta - added:
constructor BaseUserCreationForm(*args, **kwargs) - added:
field BaseUserCreationForm.Meta.field_classes - added:
field BaseUserCreationForm.Meta.fields - added:
field BaseUserCreationForm.Meta.model - added:
field BaseUserCreationForm.error_messages - added:
field BaseUserCreationForm.password1 - added:
field BaseUserCreationForm.password2 - added:
method BaseUserCreationForm.clean_password2() - added:
method BaseUserCreationForm.save(commit=…) - added:
method ReadOnlyPasswordHashWidget.id_for_label(id_) - added:
method UserCreationForm.clean_username() - added:
variable logger
- changed:
function reset_hashers(**kwargs) → function reset_hashers(*, setting, **kwargs) - added:
class ScryptPasswordHasher(BasePasswordHasher) - added:
constructor CryptPasswordHasher(*args, **kwargs) - added:
constructor SHA1PasswordHasher(*args, **kwargs) - added:
constructor UnsaltedMD5PasswordHasher(*args, **kwargs) - added:
constructor UnsaltedSHA1PasswordHasher(*args, **kwargs) - added:
field ScryptPasswordHasher.algorithm - added:
field ScryptPasswordHasher.block_size - added:
field ScryptPasswordHasher.maxmem - added:
field ScryptPasswordHasher.parallelism - added:
field ScryptPasswordHasher.work_factor - added:
method ScryptPasswordHasher.decode(encoded) - added:
method ScryptPasswordHasher.encode(password, salt, n=…, r=…, p=…) - added:
method ScryptPasswordHasher.harden_runtime(password, encoded) - added:
method ScryptPasswordHasher.must_update(encoded) - added:
method ScryptPasswordHasher.safe_summary(encoded) - added:
method ScryptPasswordHasher.verify(password, encoded)
- added:
property Command.username_is_unique
- removed:
field CommonPasswordValidator.DEFAULT_PASSWORD_LIST_PATH - added:
property CommonPasswordValidator.DEFAULT_PASSWORD_LIST_PATH
- added:
field PasswordResetTokenGenerator.secret_fallbacks
- removed:
class SuccessURLAllowedHostsMixin - removed:
field LoginView.redirect_field_name - removed:
field LogoutView.next_page - removed:
field LogoutView.redirect_field_name - removed:
field SuccessURLAllowedHostsMixin.success_url_allowed_hosts - removed:
method LoginView.get_redirect_url() - removed:
method LoginView.get_success_url() - removed:
method LogoutView.get_next_page() - removed:
method SuccessURLAllowedHostsMixin.get_success_url_allowed_hosts() - changed:
class LoginView(SuccessURLAllowedHostsMixin, FormView) → class LoginView(RedirectURLMixin, FormView) - changed:
class LogoutView(SuccessURLAllowedHostsMixin, TemplateView) → class LogoutView(RedirectURLMixin, TemplateView) - added:
class RedirectURLMixin - added:
field LogoutView.get - added:
field LogoutView.http_method_names - added:
field RedirectURLMixin.next_page - added:
field RedirectURLMixin.redirect_field_name - added:
field RedirectURLMixin.success_url_allowed_hosts - added:
method LoginView.get_default_redirect_url() - added:
method LogoutView.get_default_redirect_url() - added:
method RedirectURLMixin.get_default_redirect_url() - added:
method RedirectURLMixin.get_redirect_url() - added:
method RedirectURLMixin.get_success_url() - added:
method RedirectURLMixin.get_success_url_allowed_hosts()
- changed:
method GenericRelation.get_extra_restriction(where_class, alias, remote_alias) → method GenericRelation.get_extra_restriction(alias, remote_alias)
- added:
export GISModelAdmin
- added:
class GISModelAdmin(GeoModelAdminMixin, ModelAdmin) - added:
class GeoModelAdminMixin - added:
constructor GeoModelAdmin(*args, **kwargs) - added:
field GeoModelAdminMixin.gis_widget - added:
field GeoModelAdminMixin.gis_widget_kwargs - added:
method GeoModelAdminMixin.formfield_for_dbfield(db_field, request, **kwargs)
- added:
constructor OpenLayersWidget(*args, **kwargs)
- removed:
property DatabaseFeatures.django_test_skips - removed:
property DatabaseFeatures.empty_intersection_returns_none - added:
field DatabaseFeatures.empty_intersection_returns_none
- added:
field MySQLOperations.function_names
- added:
method MySQLGISSchemaEditor.quote_value(value)
- added:
property DatabaseFeatures.django_test_skips
- added:
method OracleGISSchemaEditor.quote_value(value)
- removed:
method PostGISAdapter.prepare(conn)
- changed:
class DatabaseWrapper(Psycopg2DatabaseWrapper) → class DatabaseWrapper(PsycopgDatabaseWrapper) - added:
class BaseBinaryDumper(Dumper) - added:
class BaseTextDumper(Dumper) - added:
class GeographyType - added:
class GeometryType - added:
class RasterType - added:
field BaseBinaryDumper.format - added:
function postgis_adapters(geo_oid, geog_oid, raster_oid) - added:
method BaseBinaryDumper.dump(obj) - added:
method BaseTextDumper.dump(obj) - added:
method DatabaseWrapper.get_new_connection(conn_params) - added:
method DatabaseWrapper.register_geometry_adapters(pg_connection, clear_caches=…)
- changed:
class DatabaseFeatures(BaseSpatialFeatures, Psycopg2DatabaseFeatures) → class DatabaseFeatures(BaseSpatialFeatures, PsycopgDatabaseFeatures)
- added:
method PostGISOperator.check_geography(lookup, template_params)
- removed:
field PostGISSchemaEditor.rast_index_wrapper - added:
field PostGISSchemaEditor.rast_index_template
- added:
method SpatiaLiteOperations.geom_lib_version() - added:
method SpatiaLiteOperations.rttopo_version()
- added:
class FromWKB(GeoFunc) - added:
class FromWKT(GeoFunc) - added:
class IsEmpty(GeoFuncMixin, Transform) - added:
field FromWKB.arity - added:
field FromWKB.geom_param_pos - added:
field FromWKB.output_field - added:
field FromWKT.arity - added:
field FromWKT.geom_param_pos - added:
field FromWKT.output_field - added:
field IsEmpty.lookup_name - added:
field IsEmpty.output_field
- removed:
variable VSI_FILESYSTEM_BASE_PATH - added:
variable VSI_FILESYSTEM_PREFIX - added:
variable VSI_MEM_FILESYSTEM_BASE_PATH
- changed:
method GEOSGeometryBase.normalize() → method GEOSGeometryBase.normalize(clone=…) - added:
method GEOSGeometryBase.make_valid()
- added:
export geos_makevalid
- added:
variable geos_makevalid
- added:
function update_level_tags(setting, **kwargs) - added:
method MessagesConfig.ready()
- removed:
method ArrayAgg.convert_value(value, expression, connection) - removed:
method JSONBAgg.convert_value(value, expression, connection) - removed:
method StringAgg.convert_value(value, expression, connection) - changed:
class ArrayAgg(OrderableAggMixin, Aggregate) → class ArrayAgg(DeprecatedConvertValueMixin, OrderableAggMixin, Aggregate) - changed:
class JSONBAgg(OrderableAggMixin, Aggregate) → class JSONBAgg(DeprecatedConvertValueMixin, OrderableAggMixin, Aggregate) - changed:
class StringAgg(OrderableAggMixin, Aggregate) → class StringAgg(DeprecatedConvertValueMixin, OrderableAggMixin, Aggregate) - added:
class BitXor(Aggregate) - added:
constructor JSONBAgg(*expressions, default=…, **extra) - added:
field ArrayAgg.deprecation_msg - added:
field ArrayAgg.deprecation_value - added:
field BitXor.function - added:
field JSONBAgg.deprecation_empty_result_set_value - added:
field JSONBAgg.deprecation_msg - added:
field JSONBAgg.deprecation_value - added:
field StringAgg.deprecation_msg - added:
field StringAgg.deprecation_value - added:
field StringAgg.output_field
- removed:
method RegrCount.convert_value(value, expression, connection) - changed:
constructor CovarPop(y, x, sample=…, filter=…) → constructor CovarPop(y, x, sample=…, filter=…, default=…) - changed:
constructor StatAggregate(y, x, output_field=…, filter=…) → constructor StatAggregate(y, x, output_field=…, filter=…, default=…) - added:
field RegrCount.empty_result_set_value
- removed:
variable RANGE_TYPES
- changed:
constructor ExclusionConstraint(*, name, expressions, index_type=…, condition=…, deferrable=…, include=…, opclasses=…) → constructor ExclusionConstraint(*, name, expressions, index_type=…, condition=…, deferrable=…, include=…, opclasses=…, violation_error_message=…) - added:
method ExclusionConstraint.validate(model, instance, exclude=…, using=…)
- added:
class ArraySubquery(Subquery) - added:
constructor ArraySubquery(queryset, **kwargs) - added:
field ArraySubquery.template - added:
property ArraySubquery.output_field
- added:
method ArrayField.db_parameters(connection)
- added:
constructor CICharField(*args, **kwargs) - added:
constructor CIEmailField(*args, **kwargs) - added:
constructor CIText(*args, **kwargs) - added:
constructor CITextField(*args, **kwargs) - added:
field CICharField.system_check_deprecated_details - added:
field CIEmailField.system_check_deprecated_details - added:
field CITextField.system_check_deprecated_details
- removed:
field JSONField.system_check_deprecated_details - added:
field JSONField.system_check_removed_details
- changed:
class DateTimeRangeField(RangeField) → class DateTimeRangeField(ContinuousRangeField) - changed:
class DecimalRangeField(RangeField) → class DecimalRangeField(ContinuousRangeField) - added:
method RangeField.get_placeholder(value, compiler, connection)
- removed:
class JSONField(BuiltinJSONField) - removed:
constructor JSONField(*args, **kwargs)
- removed:
method BrinIndex.check_supported(schema_editor) - removed:
method GistIndex.check_supported(schema_editor) - added:
method SpGistIndex.check_supported(schema_editor)
- added:
class TrigramStrictWordSimilar(PostgresOperatorLookup) - added:
class TrigramWordSimilar(PostgresOperatorLookup) - added:
field TrigramStrictWordSimilar.lookup_name - added:
field TrigramStrictWordSimilar.postgres_operator - added:
field TrigramWordSimilar.lookup_name - added:
field TrigramWordSimilar.postgres_operator - added:
method Overlap.get_prep_lookup()
- added:
class AddConstraintNotValid(AddConstraint) - added:
class ValidateConstraint(Operation) - added:
constructor AddConstraintNotValid(model_name, constraint) - added:
constructor ValidateConstraint(model_name, name) - added:
method AddConstraintNotValid.database_forwards(app_label, schema_editor, from_state, to_state) - added:
method AddConstraintNotValid.describe() - added:
method ValidateConstraint.database_backwards(app_label, schema_editor, from_state, to_state) - added:
method ValidateConstraint.database_forwards(app_label, schema_editor, from_state, to_state) - added:
method ValidateConstraint.deconstruct() - added:
method ValidateConstraint.describe() - added:
method ValidateConstraint.state_forwards(app_label, state) - added:
property AddConstraintNotValid.migration_name_fragment - added:
property ValidateConstraint.migration_name_fragment
- added:
class TrigramStrictWordDistance(TrigramWordBase) - added:
class TrigramStrictWordSimilarity(TrigramWordBase) - added:
class TrigramWordBase(Func) - added:
class TrigramWordDistance(TrigramWordBase) - added:
class TrigramWordSimilarity(TrigramWordBase) - added:
constructor TrigramWordBase(string, expression, **extra) - added:
field TrigramStrictWordDistance.arg_joiner - added:
field TrigramStrictWordDistance.function - added:
field TrigramStrictWordSimilarity.function - added:
field TrigramWordBase.output_field - added:
field TrigramWordDistance.arg_joiner - added:
field TrigramWordDistance.function - added:
field TrigramWordSimilarity.function
- added:
function get_type_oids(connection_alias, type_name)
- changed:
constructor RedirectFallbackMiddleware(get_response=…) → constructor RedirectFallbackMiddleware(get_response)
- changed:
constructor SessionMiddleware(get_response=…) → constructor SessionMiddleware(get_response)
- removed:
class PickleSerializer - removed:
field PickleSerializer.protocol - removed:
method PickleSerializer.dumps(obj) - removed:
method PickleSerializer.loads(data) - added:
variable PickleSerializer
- added:
export RemovedInDjango50Warning - added:
method GenericSitemap.get_latest_lastmod() - added:
method Sitemap.get_languages_for_item(item) - added:
method Sitemap.get_latest_lastmod()
- added:
class SitemapIndexItem - added:
field SitemapIndexItem.last_mod: bool - added:
field SitemapIndexItem.location: str
- added:
async method ASGIStaticFilesHandler.get_response_async(request)
- changed:
constructor ManifestFilesMixin(*args, **kwargs) → constructor ManifestFilesMixin(*args, manifest_storage=…, **kwargs) - added:
field HashedFilesMixin.support_js_module_import_aggregation
- added:
async method BaseCache.aadd(key, value, timeout=…, version=…) - added:
async method BaseCache.aclear() - added:
async method BaseCache.aclose(**kwargs) - added:
async method BaseCache.adecr(key, delta=…, version=…) - added:
async method BaseCache.adecr_version(key, delta=…, version=…) - added:
async method BaseCache.adelete(key, version=…) - added:
async method BaseCache.adelete_many(keys, version=…) - added:
async method BaseCache.aget(key, default=…, version=…) - added:
async method BaseCache.aget_many(keys, version=…) - added:
async method BaseCache.aget_or_set(key, default, timeout=…, version=…) - added:
async method BaseCache.ahas_key(key, version=…) - added:
async method BaseCache.aincr(key, delta=…, version=…) - added:
async method BaseCache.aincr_version(key, delta=…, version=…) - added:
async method BaseCache.aset(key, value, timeout=…, version=…) - added:
async method BaseCache.aset_many(data, timeout=…, version=…) - added:
async method BaseCache.atouch(key, timeout=…, version=…) - added:
method BaseCache.make_and_validate_key(key, version=…)
- removed:
class MemcachedCache(BaseMemcachedCache) - removed:
constructor MemcachedCache(server, params) - removed:
method BaseMemcachedCache.decr(key, delta=…, version=…) - removed:
method MemcachedCache.delete(key, version=…) - removed:
method MemcachedCache.get(key, default=…, version=…)
- added:
class RedisCache(BaseCache) - added:
class RedisCacheClient - added:
class RedisSerializer - added:
constructor RedisCache(server, params) - added:
constructor RedisCacheClient(servers, serializer=…, pool_class=…, parser_class=…, **options) - added:
constructor RedisSerializer(protocol=…) - added:
method RedisCache.add(key, value, timeout=…, version=…) - added:
method RedisCache.clear() - added:
method RedisCache.delete(key, version=…) - added:
method RedisCache.delete_many(keys, version=…) - added:
method RedisCache.get(key, default=…, version=…) - added:
method RedisCache.get_backend_timeout(timeout=…) - added:
method RedisCache.get_many(keys, version=…) - added:
method RedisCache.has_key(key, version=…) - added:
method RedisCache.incr(key, delta=…, version=…) - added:
method RedisCache.set(key, value, timeout=…, version=…) - added:
method RedisCache.set_many(data, timeout=…, version=…) - added:
method RedisCache.touch(key, timeout=…, version=…) - added:
method RedisCacheClient.add(key, value, timeout) - added:
method RedisCacheClient.clear() - added:
method RedisCacheClient.delete(key) - added:
method RedisCacheClient.delete_many(keys) - added:
method RedisCacheClient.get(key, default) - added:
method RedisCacheClient.get_client(key=…, *, write=…) - added:
method RedisCacheClient.get_many(keys) - added:
method RedisCacheClient.has_key(key) - added:
method RedisCacheClient.incr(key, delta) - added:
method RedisCacheClient.set(key, value, timeout) - added:
method RedisCacheClient.set_many(data, timeout) - added:
method RedisCacheClient.touch(key, timeout) - added:
method RedisSerializer.dumps(obj) - added:
method RedisSerializer.loads(data)
- added:
function check_csrf_trusted_origins(app_configs, **kwargs)
- added:
function check_setting_file_upload_temp_dir(app_configs, **kwargs)
- added:
field Tags.files
- removed:
function check_default_hashing_algorithm(app_configs, **kwargs) - removed:
variable E100 - added:
function check_cross_origin_opener_policy(app_configs, **kwargs) - added:
function check_secret_key_fallbacks(app_configs, **kwargs) - added:
variable CROSS_ORIGIN_OPENER_POLICY_VALUES - added:
variable E024 - added:
variable SECRET_KEY_WARNING_MSG - added:
variable W025
- added:
function check_for_template_tags_with_the_same_name(app_configs, **kwargs) - added:
variable W003
- added:
class FullResultSet(Exception)
- removed:
class FileSystemStorage(Storage) - removed:
class Storage - removed:
constructor FileSystemStorage(location=…, base_url=…, file_permissions_mode=…, directory_permissions_mode=…) - removed:
field FileSystemStorage.OS_OPEN_FLAGS - removed:
method FileSystemStorage.delete(name) - removed:
method FileSystemStorage.exists(name) - removed:
method FileSystemStorage.get_accessed_time(name) - removed:
method FileSystemStorage.get_created_time(name) - removed:
method FileSystemStorage.get_modified_time(name) - removed:
method FileSystemStorage.listdir(path) - removed:
method FileSystemStorage.path(name) - removed:
method FileSystemStorage.size(name) - removed:
method FileSystemStorage.url(name) - removed:
method Storage.delete(name) - removed:
method Storage.exists(name) - removed:
method Storage.generate_filename(filename) - removed:
method Storage.get_accessed_time(name) - removed:
method Storage.get_alternative_name(file_root, file_ext) - removed:
method Storage.get_available_name(name, max_length=…) - removed:
method Storage.get_created_time(name) - removed:
method Storage.get_modified_time(name) - removed:
method Storage.get_valid_name(name) - removed:
method Storage.listdir(path) - removed:
method Storage.open(name, mode=…) - removed:
method Storage.path(name) - removed:
method Storage.save(name, content, max_length=…) - removed:
method Storage.size(name) - removed:
method Storage.url(name) - removed:
property FileSystemStorage.base_location - removed:
property FileSystemStorage.base_url - removed:
property FileSystemStorage.directory_permissions_mode - removed:
property FileSystemStorage.file_permissions_mode - removed:
property FileSystemStorage.location - added:
export FileSystemStorage - added:
export InMemoryStorage - added:
export InvalidStorageError - added:
export Storage - added:
export StorageHandler - added:
variable storages
- added:
class Storage - added:
method Storage.delete(name) - added:
method Storage.exists(name) - added:
method Storage.generate_filename(filename) - added:
method Storage.get_accessed_time(name) - added:
method Storage.get_alternative_name(file_root, file_ext) - added:
method Storage.get_available_name(name, max_length=…) - added:
method Storage.get_created_time(name) - added:
method Storage.get_modified_time(name) - added:
method Storage.get_valid_name(name) - added:
method Storage.listdir(path) - added:
method Storage.open(name, mode=…) - added:
method Storage.path(name) - added:
method Storage.save(name, content, max_length=…) - added:
method Storage.size(name) - added:
method Storage.url(name)
- added:
class FileSystemStorage(Storage, StorageSettingsMixin) - added:
constructor FileSystemStorage(location=…, base_url=…, file_permissions_mode=…, directory_permissions_mode=…) - added:
field FileSystemStorage.OS_OPEN_FLAGS - added:
method FileSystemStorage.delete(name) - added:
method FileSystemStorage.exists(name) - added:
method FileSystemStorage.get_accessed_time(name) - added:
method FileSystemStorage.get_created_time(name) - added:
method FileSystemStorage.get_modified_time(name) - added:
method FileSystemStorage.listdir(path) - added:
method FileSystemStorage.path(name) - added:
method FileSystemStorage.size(name) - added:
method FileSystemStorage.url(name) - added:
property FileSystemStorage.base_location - added:
property FileSystemStorage.base_url - added:
property FileSystemStorage.directory_permissions_mode - added:
property FileSystemStorage.file_permissions_mode - added:
property FileSystemStorage.location
- added:
class InvalidStorageError(ImproperlyConfigured) - added:
class StorageHandler - added:
constructor StorageHandler(backends=…) - added:
method StorageHandler.create_storage(params) - added:
property StorageHandler.backends
- added:
class InMemoryStorage(Storage, StorageSettingsMixin) - added:
constructor InMemoryStorage(location=…, base_url=…, file_permissions_mode=…, directory_permissions_mode=…) - added:
method InMemoryStorage.delete(name) - added:
method InMemoryStorage.exists(name) - added:
method InMemoryStorage.get_accessed_time(name) - added:
method InMemoryStorage.get_created_time(name) - added:
method InMemoryStorage.get_modified_time(name) - added:
method InMemoryStorage.listdir(path) - added:
method InMemoryStorage.path(name) - added:
method InMemoryStorage.size(name) - added:
method InMemoryStorage.url(name) - added:
property InMemoryStorage.base_location - added:
property InMemoryStorage.base_url - added:
property InMemoryStorage.directory_permissions_mode - added:
property InMemoryStorage.file_permissions_mode - added:
property InMemoryStorage.location
- added:
class StorageSettingsMixin
- added:
async method ASGIHandler.handle(scope, receive, send) - added:
method ASGIRequest.close()
- changed:
class LimitedStream → class LimitedStream(IOBase) - changed:
constructor LimitedStream(stream, limit, buf_size=…) → constructor LimitedStream(stream, limit) - changed:
method LimitedStream.read(size=…) → method LimitedStream.read(size=…, /) - changed:
method LimitedStream.readline(size=…) → method LimitedStream.readline(size=…, /)
- added:
property EmailBackend.ssl_context
- added:
field BaseCommand.suppressed_base_arguments - added:
method BaseCommand.add_base_argument(parser, *args, **kwargs) - added:
method CommandParser.add_subparsers(**kwargs)
- changed:
method Command.get_meta(table_name, constraints, column_to_field_name, is_view, is_partition) → method Command.get_meta(table_name, constraints, column_to_field_name, is_view, is_partition, comment)
- added:
method Command.find_fixture_files_in_dir(fixture_dir, fixture_name, targets) - added:
method Command.get_fixture_name_and_dirs(fixture_name) - added:
method Command.get_targets(fixture_name, ser_fmt, cmp_fmt) - added:
method Command.reset_sequences(connection, models) - added:
method Command.save_obj(obj) - added:
property Command.compression_formats
- added:
function is_valid_locale(locale)
- changed:
method Command.write_migration_files(changes) → method Command.write_migration_files(changes, update_previous_migration_paths=…) - added:
method Command.log(msg) - added:
method Command.write_to_last_migration_files(changes) - added:
property Command.log_output - added:
static method Command.get_relative_path(path)
- added:
class Command(BaseCommand) - added:
field Command.help - added:
method Command.add_arguments(parser) - added:
method Command.handle(*args, **options)
- added:
field Command.suppressed_base_arguments - added:
method Command.on_bind(server_port)
- added:
method TemplateCommand.apply_umask(old_path, new_path)
- added:
function find_formatters() - added:
function run_formatters(written_files, black_path=…)
- added:
class PickleSerializer - added:
constructor PickleSerializer(protocol=…) - added:
method PickleSerializer.dumps(obj) - added:
method PickleSerializer.loads(data)
- added:
function fast_cache_clearing() - added:
function getInnerTextList(node)
- removed:
field Signer.legacy_algorithm - changed:
constructor Signer(key=…, sep=…, salt=…, algorithm=…) → constructor Signer(*args, key=…, sep=…, salt=…, algorithm=…, fallback_keys=…) - changed:
function loads(s, key=…, salt=…, serializer=…, max_age=…) → function loads(s, key=…, salt=…, serializer=…, max_age=…, fallback_keys=…) - changed:
method Signer.signature(value) → method Signer.signature(value, key=…) - added:
function b62_decode(s) - added:
function b62_encode(s) - added:
variable BASE62_ALPHABET
- removed:
property EmailValidator.domain_whitelist - changed:
constructor EmailValidator(message=…, code=…, allowlist=…, *, whitelist=…) → constructor EmailValidator(message=…, code=…, allowlist=…) - added:
class StepValueValidator(BaseValidator) - added:
field StepValueValidator.code - added:
field StepValueValidator.message - added:
method StepValueValidator.compare(a, b)
- changed:
method BaseDatabaseWrapper.on_commit(func) → method BaseDatabaseWrapper.on_commit(func, robust=…) - added:
function timezone_constructor(tzname) - added:
method BaseDatabaseWrapper.check_database_version_supported() - added:
method BaseDatabaseWrapper.close_if_health_check_failed() - added:
method BaseDatabaseWrapper.get_database_version() - added:
variable RAN_DB_VERSION_CHECK - added:
variable logger
- added:
method BaseDatabaseCreation.setup_worker_connection(_worker_id)
- removed:
field BaseDatabaseFeatures.allows_group_by_pk - removed:
field BaseDatabaseFeatures.supports_mixed_date_datetime_comparisons - removed:
field BaseDatabaseFeatures.validates_explain_options - added:
field BaseDatabaseFeatures.allows_group_by_select_index - added:
field BaseDatabaseFeatures.can_rename_index - added:
field BaseDatabaseFeatures.create_test_table_with_composite_primary_key - added:
field BaseDatabaseFeatures.ignores_unnecessary_order_by_in_subqueries - added:
field BaseDatabaseFeatures.minimum_database_version - added:
field BaseDatabaseFeatures.prohibits_null_characters_in_text_exception - added:
field BaseDatabaseFeatures.requires_compound_order_by_subquery - added:
field BaseDatabaseFeatures.schema_editor_uses_clientside_param_binding - added:
field BaseDatabaseFeatures.supports_comments - added:
field BaseDatabaseFeatures.supports_comments_inline - added:
field BaseDatabaseFeatures.supports_comparing_boolean_expr - added:
field BaseDatabaseFeatures.supports_logical_xor - added:
field BaseDatabaseFeatures.supports_unlimited_charfield - added:
field BaseDatabaseFeatures.supports_update_conflicts - added:
field BaseDatabaseFeatures.supports_update_conflicts_with_target - added:
field BaseDatabaseFeatures.test_now_utc_template
- removed:
method BaseDatabaseIntrospection.get_key_columns(cursor, table_name) - added:
method BaseDatabaseIntrospection.get_primary_key_columns(cursor, table_name)
- removed:
field BaseDatabaseOperations.extract_trunc_lookup_pattern - removed:
method BaseDatabaseOperations.ignore_conflicts_suffix_sql(ignore_conflicts=…) - changed:
method BaseDatabaseOperations.date_extract_sql(lookup_type, field_name) → method BaseDatabaseOperations.date_extract_sql(lookup_type, sql, params) - changed:
method BaseDatabaseOperations.date_trunc_sql(lookup_type, field_name, tzname=…) → method BaseDatabaseOperations.date_trunc_sql(lookup_type, sql, params, tzname=…) - changed:
method BaseDatabaseOperations.datetime_cast_date_sql(field_name, tzname) → method BaseDatabaseOperations.datetime_cast_date_sql(sql, params, tzname) - changed:
method BaseDatabaseOperations.datetime_cast_time_sql(field_name, tzname) → method BaseDatabaseOperations.datetime_cast_time_sql(sql, params, tzname) - changed:
method BaseDatabaseOperations.datetime_extract_sql(lookup_type, field_name, tzname) → method BaseDatabaseOperations.datetime_extract_sql(lookup_type, sql, params, tzname) - changed:
method BaseDatabaseOperations.datetime_trunc_sql(lookup_type, field_name, tzname) → method BaseDatabaseOperations.datetime_trunc_sql(lookup_type, sql, params, tzname) - changed:
method BaseDatabaseOperations.insert_statement(ignore_conflicts=…) → method BaseDatabaseOperations.insert_statement(on_conflict=…) - changed:
method BaseDatabaseOperations.time_extract_sql(lookup_type, field_name) → method BaseDatabaseOperations.time_extract_sql(lookup_type, sql, params) - changed:
method BaseDatabaseOperations.time_trunc_sql(lookup_type, field_name, tzname=…) → method BaseDatabaseOperations.time_trunc_sql(lookup_type, sql, params, tzname=…) - changed:
method BaseDatabaseOperations.year_lookup_bounds_for_date_field(value) → method BaseDatabaseOperations.year_lookup_bounds_for_date_field(value, iso_year=…) - changed:
method BaseDatabaseOperations.year_lookup_bounds_for_datetime_field(value) → method BaseDatabaseOperations.year_lookup_bounds_for_datetime_field(value, iso_year=…) - added:
method BaseDatabaseOperations.adapt_integerfield_value(value, internal_type) - added:
method BaseDatabaseOperations.adapt_json_value(value, encoder) - added:
method BaseDatabaseOperations.format_for_duration_arithmetic(sql) - added:
method BaseDatabaseOperations.on_conflict_suffix_sql(fields, on_conflict, update_fields, unique_fields)
- removed:
field BaseDatabaseSchemaEditor.sql_alter_column_collate - added:
field BaseDatabaseSchemaEditor.sql_alter_column_comment - added:
field BaseDatabaseSchemaEditor.sql_alter_table_comment - added:
field BaseDatabaseSchemaEditor.sql_rename_index - added:
method BaseDatabaseSchemaEditor.alter_db_table_comment(model, old_db_table_comment, new_db_table_comment) - added:
method BaseDatabaseSchemaEditor.rename_index(model, old_index, new_index)
- removed:
field DatabaseIntrospection.get_key_columns
- added:
method DatabaseWrapper.get_database_version()
- added:
method DatabaseClient.runshell(parameters)
- removed:
field DatabaseFeatures.allows_group_by_pk - removed:
field DatabaseFeatures.has_case_insensitive_like - removed:
field DatabaseFeatures.supports_select_intersection - removed:
property DatabaseFeatures.supports_json_field - added:
field DatabaseFeatures.create_test_table_with_composite_primary_key - added:
field DatabaseFeatures.supports_comments - added:
field DatabaseFeatures.supports_comments_inline - added:
field DatabaseFeatures.supports_logical_xor - added:
field DatabaseFeatures.supports_update_conflicts - added:
field DatabaseFeatures.test_now_utc_template - added:
field DatabaseFeatures.uses_savepoints - added:
property DatabaseFeatures.allows_group_by_selected_pks - added:
property DatabaseFeatures.can_rename_index - added:
property DatabaseFeatures.minimum_database_version - added:
property DatabaseFeatures.supports_select_intersection
- removed:
method DatabaseIntrospection.get_key_columns(cursor, table_name) - added:
variable TableInfo
- changed:
method DatabaseOperations.date_extract_sql(lookup_type, field_name) → method DatabaseOperations.date_extract_sql(lookup_type, sql, params) - changed:
method DatabaseOperations.date_trunc_sql(lookup_type, field_name, tzname=…) → method DatabaseOperations.date_trunc_sql(lookup_type, sql, params, tzname=…) - changed:
method DatabaseOperations.datetime_cast_date_sql(field_name, tzname) → method DatabaseOperations.datetime_cast_date_sql(sql, params, tzname) - changed:
method DatabaseOperations.datetime_cast_time_sql(field_name, tzname) → method DatabaseOperations.datetime_cast_time_sql(sql, params, tzname) - changed:
method DatabaseOperations.datetime_extract_sql(lookup_type, field_name, tzname) → method DatabaseOperations.datetime_extract_sql(lookup_type, sql, params, tzname) - changed:
method DatabaseOperations.datetime_trunc_sql(lookup_type, field_name, tzname) → method DatabaseOperations.datetime_trunc_sql(lookup_type, sql, params, tzname) - changed:
method DatabaseOperations.insert_statement(ignore_conflicts=…) → method DatabaseOperations.insert_statement(on_conflict=…) - changed:
method DatabaseOperations.time_trunc_sql(lookup_type, field_name, tzname=…) → method DatabaseOperations.time_trunc_sql(lookup_type, sql, params, tzname=…) - added:
method DatabaseOperations.conditional_expression_supported_in_where_clause(expression) - added:
method DatabaseOperations.on_conflict_suffix_sql(fields, on_conflict, update_fields, unique_fields)
- removed:
field DatabaseSchemaEditor.sql_alter_column_collate - added:
field DatabaseSchemaEditor.sql_alter_column_comment - added:
field DatabaseSchemaEditor.sql_alter_table_comment - added:
field DatabaseSchemaEditor.sql_rename_index - added:
method DatabaseSchemaEditor.remove_constraint(model, constraint) - added:
method DatabaseSchemaEditor.remove_index(model, index)
- added:
method DatabaseWrapper.get_database_version()
- removed:
field DatabaseFeatures.has_case_insensitive_like - removed:
field DatabaseFeatures.supports_combined_alters - removed:
property DatabaseFeatures.has_json_object_function - added:
field DatabaseFeatures.allows_group_by_select_index - added:
field DatabaseFeatures.can_rename_index - added:
field DatabaseFeatures.create_test_table_with_composite_primary_key - added:
field DatabaseFeatures.ignores_unnecessary_order_by_in_subqueries - added:
field DatabaseFeatures.minimum_database_version - added:
field DatabaseFeatures.requires_compound_order_by_subquery - added:
field DatabaseFeatures.supports_comments - added:
field DatabaseFeatures.supports_comparing_boolean_expr - added:
field DatabaseFeatures.test_now_utc_template
- removed:
method DatabaseIntrospection.get_key_columns(cursor, table_name) - removed:
method DatabaseIntrospection.get_primary_key_column(cursor, table_name) - added:
method DatabaseIntrospection.get_primary_key_columns(cursor, table_name) - added:
variable TableInfo
- removed:
method DatabaseOperations.field_cast_sql(db_type, internal_type) - changed:
method DatabaseOperations.date_extract_sql(lookup_type, field_name) → method DatabaseOperations.date_extract_sql(lookup_type, sql, params) - changed:
method DatabaseOperations.date_trunc_sql(lookup_type, field_name, tzname=…) → method DatabaseOperations.date_trunc_sql(lookup_type, sql, params, tzname=…) - changed:
method DatabaseOperations.datetime_cast_date_sql(field_name, tzname) → method DatabaseOperations.datetime_cast_date_sql(sql, params, tzname) - changed:
method DatabaseOperations.datetime_cast_time_sql(field_name, tzname) → method DatabaseOperations.datetime_cast_time_sql(sql, params, tzname) - changed:
method DatabaseOperations.datetime_extract_sql(lookup_type, field_name, tzname) → method DatabaseOperations.datetime_extract_sql(lookup_type, sql, params, tzname) - changed:
method DatabaseOperations.datetime_trunc_sql(lookup_type, field_name, tzname) → method DatabaseOperations.datetime_trunc_sql(lookup_type, sql, params, tzname) - changed:
method DatabaseOperations.time_trunc_sql(lookup_type, field_name, tzname=…) → method DatabaseOperations.time_trunc_sql(lookup_type, sql, params, tzname=…)
- removed:
field DatabaseSchemaEditor.sql_alter_column_collate
- removed:
field BulkInsertMapper.CLOB - added:
field BulkInsertMapper.NCLOB
- removed:
function psycopg2_version() - removed:
variable PSYCOPG2_VERSION - added:
class Cursor(CursorMixin, Database.ClientCursor) - added:
class CursorMixin - added:
class ServerBindingCursor(CursorMixin, Database.Cursor) - added:
field DatabaseWrapper.data_types_suffix - added:
function psycopg_version() - added:
method CursorDebugWrapper.copy(statement) - added:
method CursorMixin.callproc(name, args=…) - added:
method DatabaseWrapper.ensure_role() - added:
method DatabaseWrapper.get_database_version() - added:
variable Cursor - added:
variable TIMESTAMPTZ_OID
- added:
class SQLCompiler(BaseSQLCompiler) - added:
export SQLAggregateCompiler - added:
export SQLDeleteCompiler - added:
export SQLInsertCompiler - added:
export SQLUpdateCompiler - added:
method SQLCompiler.quote_name_unless_alias(name)
- removed:
field DatabaseFeatures.has_brin_autosummarize - removed:
field DatabaseFeatures.has_case_insensitive_like - removed:
field DatabaseFeatures.has_websearch_to_tsquery - removed:
field DatabaseFeatures.supports_alternate_collation_providers - removed:
field DatabaseFeatures.supports_covering_gist_indexes - removed:
field DatabaseFeatures.supports_non_deterministic_collations - removed:
field DatabaseFeatures.supports_table_partitions - removed:
property DatabaseFeatures.is_postgresql_10 - removed:
property DatabaseFeatures.is_postgresql_11 - removed:
property DatabaseFeatures.is_postgresql_12 - removed:
property DatabaseFeatures.test_collations - added:
field DatabaseFeatures.can_rename_index - added:
field DatabaseFeatures.create_test_table_with_composite_primary_key - added:
field DatabaseFeatures.has_bit_xor - added:
field DatabaseFeatures.minimum_database_version - added:
field DatabaseFeatures.schema_editor_uses_clientside_param_binding - added:
field DatabaseFeatures.supports_comments - added:
field DatabaseFeatures.supports_covering_spgist_indexes - added:
field DatabaseFeatures.supports_unlimited_charfield - added:
field DatabaseFeatures.supports_update_conflicts - added:
field DatabaseFeatures.supports_update_conflicts_with_target - added:
field DatabaseFeatures.test_collations - added:
field DatabaseFeatures.test_now_utc_template - added:
property DatabaseFeatures.django_test_expected_failures - added:
property DatabaseFeatures.is_postgresql_14 - added:
property DatabaseFeatures.prohibits_null_characters_in_text_exception - added:
property DatabaseFeatures.uses_server_side_binding
- removed:
method DatabaseIntrospection.get_key_columns(cursor, table_name) - added:
variable FieldInfo - added:
variable TableInfo
- removed:
method DatabaseOperations.ignore_conflicts_suffix_sql(ignore_conflicts=…) - changed:
method DatabaseOperations.date_extract_sql(lookup_type, field_name) → method DatabaseOperations.date_extract_sql(lookup_type, sql, params) - changed:
method DatabaseOperations.date_trunc_sql(lookup_type, field_name, tzname=…) → method DatabaseOperations.date_trunc_sql(lookup_type, sql, params, tzname=…) - changed:
method DatabaseOperations.datetime_cast_date_sql(field_name, tzname) → method DatabaseOperations.datetime_cast_date_sql(sql, params, tzname) - changed:
method DatabaseOperations.datetime_cast_time_sql(field_name, tzname) → method DatabaseOperations.datetime_cast_time_sql(sql, params, tzname) - changed:
method DatabaseOperations.datetime_extract_sql(lookup_type, field_name, tzname) → method DatabaseOperations.datetime_extract_sql(lookup_type, sql, params, tzname) - changed:
method DatabaseOperations.datetime_trunc_sql(lookup_type, field_name, tzname) → method DatabaseOperations.datetime_trunc_sql(lookup_type, sql, params, tzname) - changed:
method DatabaseOperations.time_trunc_sql(lookup_type, field_name, tzname=…) → method DatabaseOperations.time_trunc_sql(lookup_type, sql, params, tzname=…) - added:
field DatabaseOperations.compiler_module - added:
field DatabaseOperations.integerfield_type_map - added:
function get_json_dumps(encoder) - added:
method DatabaseOperations.adapt_integerfield_value(value, internal_type) - added:
method DatabaseOperations.adapt_json_value(value, encoder) - added:
method DatabaseOperations.compose_sql(sql, params) - added:
method DatabaseOperations.on_conflict_suffix_sql(fields, on_conflict, update_fields, unique_fields) - added:
method DatabaseOperations.time_extract_sql(lookup_type, sql, params)
- added:
class BaseTzLoader(TimestamptzLoader) - added:
class DjangoRangeDumper(RangeDumper) - added:
class IsolationLevel(IntEnum) - added:
field BaseTzLoader.timezone - added:
field IsolationLevel.READ_COMMITTED - added:
field IsolationLevel.READ_UNCOMMITTED - added:
field IsolationLevel.REPEATABLE_READ - added:
field IsolationLevel.SERIALIZABLE - added:
function get_adapters_template(use_tz, timezone) - added:
function mogrify(sql, params, connection) - added:
function register_tzloader(tz, context) - added:
method BaseTzLoader.load(data) - added:
method DjangoRangeDumper.upgrade(obj, format) - added:
variable DateRange - added:
variable DateTimeRange - added:
variable DateTimeTZRange - added:
variable Inet - added:
variable NumericRange - added:
variable RANGE_TYPES - added:
variable TSRANGE_OID - added:
variable TSTZRANGE_OID - added:
variable is_psycopg3
- removed:
field DatabaseSchemaEditor.sql_create_sequence - removed:
field DatabaseSchemaEditor.sql_set_sequence_max - removed:
field DatabaseSchemaEditor.sql_set_sequence_owner - added:
field DatabaseSchemaEditor.sql_add_identity - added:
field DatabaseSchemaEditor.sql_alter_sequence_type - added:
field DatabaseSchemaEditor.sql_drop_indentity - added:
field DatabaseSchemaEditor.sql_update_with_default - added:
method DatabaseSchemaEditor.execute(sql, params=…)
- removed:
function check_sqlite_version() - removed:
function list_aggregate(function) - removed:
function none_guard(func) - removed:
method DatabaseWrapper.init_connection_state() - changed:
method SQLiteCursorWrapper.convert_query(query) → method SQLiteCursorWrapper.convert_query(query, *, param_names=…) - added:
function adapt_date(val) - added:
function adapt_datetime(val) - added:
method DatabaseWrapper.get_database_version()
- added:
method DatabaseCreation.setup_worker_connection(_worker_id)
- removed:
field DatabaseFeatures.can_use_chunked_reads - removed:
field DatabaseFeatures.supports_functions_in_partial_indexes - removed:
field DatabaseFeatures.supports_mixed_date_datetime_comparisons - removed:
field DatabaseFeatures.supports_paramstyle_pyformat - removed:
field DatabaseFeatures.supports_pragma_foreign_key_check - added:
field DatabaseFeatures.can_alter_table_drop_column - added:
field DatabaseFeatures.can_return_rows_from_bulk_insert - added:
field DatabaseFeatures.create_test_table_with_composite_primary_key - added:
field DatabaseFeatures.django_test_expected_failures - added:
field DatabaseFeatures.has_case_insensitive_like - added:
field DatabaseFeatures.minimum_database_version - added:
field DatabaseFeatures.requires_compound_order_by_subquery - added:
field DatabaseFeatures.requires_literal_defaults - added:
field DatabaseFeatures.supports_update_conflicts - added:
field DatabaseFeatures.supports_update_conflicts_with_target - added:
property DatabaseFeatures.can_return_columns_from_insert
- removed:
method DatabaseIntrospection.get_key_columns(cursor, table_name) - removed:
method DatabaseIntrospection.get_primary_key_column(cursor, table_name) - added:
method DatabaseIntrospection.get_primary_key_columns(cursor, table_name)
- changed:
method DatabaseOperations.date_extract_sql(lookup_type, field_name) → method DatabaseOperations.date_extract_sql(lookup_type, sql, params) - changed:
method DatabaseOperations.date_trunc_sql(lookup_type, field_name, tzname=…) → method DatabaseOperations.date_trunc_sql(lookup_type, sql, params, tzname=…) - changed:
method DatabaseOperations.datetime_cast_date_sql(field_name, tzname) → method DatabaseOperations.datetime_cast_date_sql(sql, params, tzname) - changed:
method DatabaseOperations.datetime_cast_time_sql(field_name, tzname) → method DatabaseOperations.datetime_cast_time_sql(sql, params, tzname) - changed:
method DatabaseOperations.datetime_extract_sql(lookup_type, field_name, tzname) → method DatabaseOperations.datetime_extract_sql(lookup_type, sql, params, tzname) - changed:
method DatabaseOperations.datetime_trunc_sql(lookup_type, field_name, tzname) → method DatabaseOperations.datetime_trunc_sql(lookup_type, sql, params, tzname) - changed:
method DatabaseOperations.insert_statement(ignore_conflicts=…) → method DatabaseOperations.insert_statement(on_conflict=…) - changed:
method DatabaseOperations.time_extract_sql(lookup_type, field_name) → method DatabaseOperations.time_extract_sql(lookup_type, sql, params) - changed:
method DatabaseOperations.time_trunc_sql(lookup_type, field_name, tzname=…) → method DatabaseOperations.time_trunc_sql(lookup_type, sql, params, tzname=…) - added:
field DatabaseOperations.jsonfield_datatype_values - added:
method DatabaseOperations.fetch_returned_insert_rows(cursor) - added:
method DatabaseOperations.on_conflict_suffix_sql(fields, on_conflict, update_fields, unique_fields) - added:
method DatabaseOperations.return_insert_columns(fields)
- added:
field DatabaseSchemaEditor.sql_alter_column_comment - added:
field DatabaseSchemaEditor.sql_alter_table_comment - added:
field DatabaseSchemaEditor.sql_create_column_inline_fk - added:
field DatabaseSchemaEditor.sql_delete_column - added:
method DatabaseSchemaEditor.prepare_default(value)
- added:
function debug_transaction(connection, sql) - added:
function split_tzname_delta(tzname)
- added:
method MigrationAutodetector.create_renamed_fields() - added:
method MigrationAutodetector.generate_altered_db_table_comment() - added:
method MigrationAutodetector.generate_removed_altered_index_together() - added:
method MigrationAutodetector.generate_removed_altered_unique_together() - added:
method MigrationAutodetector.generate_renamed_indexes()
- added:
export AlterModelTableComment - added:
export RenameIndex
- added:
class AlterModelTableComment(ModelOptionOperation) - added:
class RenameIndex(IndexOperation) - added:
constructor AlterModelTableComment(name, table_comment) - added:
constructor RenameIndex(model_name, new_name, old_name=…, old_fields=…) - added:
method AlterModelTableComment.database_backwards(app_label, schema_editor, from_state, to_state) - added:
method AlterModelTableComment.database_forwards(app_label, schema_editor, from_state, to_state) - added:
method AlterModelTableComment.deconstruct() - added:
method AlterModelTableComment.describe() - added:
method AlterModelTableComment.state_forwards(app_label, state) - added:
method AlterTogetherOptionOperation.can_reduce_through(operation, app_label) - added:
method ModelOperation.can_reduce_through(operation, app_label) - added:
method RenameIndex.database_backwards(app_label, schema_editor, from_state, to_state) - added:
method RenameIndex.database_forwards(app_label, schema_editor, from_state, to_state) - added:
method RenameIndex.deconstruct() - added:
method RenameIndex.describe() - added:
method RenameIndex.reduce(operation, app_label) - added:
method RenameIndex.state_forwards(app_label, state) - added:
property AlterModelTableComment.migration_name_fragment - added:
property RenameIndex.migration_name_fragment - added:
property RenameIndex.new_name_lower - added:
property RenameIndex.old_name_lower
- removed:
function field_is_referenced(state, model_tuple, field_tuple) - removed:
function field_references(model_tuple, field, reference_model_tuple, reference_field_name=…, reference_field=…) - removed:
function get_references(state, model_tuple, field_tuple=…) - removed:
function resolve_relation(model, app_label=…, model_name=…) - removed:
variable FieldReference
- added:
constructor InteractiveMigrationQuestioner(defaults=…, specified_apps=…, dry_run=…, prompt_output=…) - added:
constructor NonInteractiveMigrationQuestioner(defaults=…, specified_apps=…, dry_run=…, verbosity=…, log=…) - added:
method InteractiveMigrationQuestioner.ask_unique_callable_default_addition(field_name, model_name) - added:
method MigrationQuestioner.ask_unique_callable_default_addition(field_name, model_name) - added:
method NonInteractiveMigrationQuestioner.log_lack_of_migration(field_name, model_name, reason)
- removed:
property ProjectState.concrete_apps - added:
method ModelState.get_field(field_name) - added:
method ProjectState.add_constraint(app_label, model_name, constraint) - added:
method ProjectState.add_field(app_label, model_name, name, field, preserve_default) - added:
method ProjectState.add_index(app_label, model_name, index) - added:
method ProjectState.alter_field(app_label, model_name, name, field, preserve_default) - added:
method ProjectState.alter_model_managers(app_label, model_name, managers) - added:
method ProjectState.alter_model_options(app_label, model_name, options, option_keys=…) - added:
method ProjectState.get_concrete_model_key(model) - added:
method ProjectState.remove_constraint(app_label, model_name, constraint_name) - added:
method ProjectState.remove_field(app_label, model_name, name) - added:
method ProjectState.remove_index(app_label, model_name, index_name) - added:
method ProjectState.remove_model_options(app_label, model_name, option_name, value_to_remove) - added:
method ProjectState.rename_field(app_label, model_name, old_name, new_name) - added:
method ProjectState.rename_index(app_label, model_name, old_index_name, new_index_name) - added:
method ProjectState.rename_model(app_label, old_name, new_name) - added:
method ProjectState.resolve_fields_and_relations() - added:
method ProjectState.resolve_model_field_relations(model_key, field_name, field, concretes=…) - added:
method ProjectState.resolve_model_relations(model_key, concretes=…) - added:
method ProjectState.update_model_field_relation(model, model_key, field_name, field, concretes) - added:
property ProjectState.relations
- added:
function field_is_referenced(state, model_tuple, field_tuple) - added:
function field_references(model_tuple, field, reference_model_tuple, reference_field_name=…, reference_field=…) - added:
function get_references(state, model_tuple, field_tuple=…) - added:
function resolve_relation(model, app_label=…, model_name=…) - added:
variable FieldReference
- removed:
method Count.convert_value(value, expression, connection) - changed:
constructor Aggregate(*expressions, distinct=…, filter=…, **extra) → constructor Aggregate(*expressions, distinct=…, filter=…, default=…, **extra) - changed:
method Aggregate.get_group_by_cols(alias=…) → method Aggregate.get_group_by_cols() - added:
field Aggregate.empty_result_set_value - added:
field Count.empty_result_set_value
- changed:
class Model → class Model(AltersData) - changed:
method Model.full_clean(exclude=…, validate_unique=…) → method Model.full_clean(exclude=…, validate_unique=…, validate_constraints=…) - added:
async method Model.adelete(using=…, keep_parents=…) - added:
async method Model.arefresh_from_db(using=…, fields=…) - added:
async method Model.asave(force_insert=…, force_update=…, using=…, update_fields=…) - added:
method Model.get_constraints() - added:
method Model.validate_constraints(exclude=…)
- added:
class OnConflict(Enum) - added:
field OnConflict.IGNORE - added:
field OnConflict.UPDATE
- changed:
constructor CheckConstraint(*, check, name) → constructor CheckConstraint(*, check, name, violation_error_message=…) - changed:
constructor UniqueConstraint(*, fields, name, condition=…, deferrable=…, include=…, opclasses=…) → constructor UniqueConstraint(*expressions, fields=…, name=…, condition=…, deferrable=…, include=…, opclasses=…, violation_error_message=…) - added:
class BaseConstraint - added:
constructor BaseConstraint(name, violation_error_message=…) - added:
field BaseConstraint.default_violation_error_message - added:
field BaseConstraint.violation_error_message - added:
method BaseConstraint.clone() - added:
method BaseConstraint.constraint_sql(model, schema_editor) - added:
method BaseConstraint.create_sql(model, schema_editor) - added:
method BaseConstraint.deconstruct() - added:
method BaseConstraint.get_violation_error_message() - added:
method BaseConstraint.remove_sql(model, schema_editor) - added:
method BaseConstraint.validate(model, instance, exclude=…, using=…) - added:
method CheckConstraint.validate(model, instance, exclude=…, using=…) - added:
method UniqueConstraint.validate(model, instance, exclude=…, using=…) - added:
property BaseConstraint.contains_expressions - added:
property UniqueConstraint.contains_expressions
- changed:
constructor Collector(using) → constructor Collector(using, origin=…)
- added:
method Choices.label() - added:
property Choices.do_not_call_in_templates
- removed:
field Window.filterable - removed:
method Exists.as_sql(compiler, connection, template=…, **extra_context) - changed:
class Case(Expression) → class Case(SQLiteNumericMixin, Expression) - changed:
class ExpressionWrapper(Expression) → class ExpressionWrapper(SQLiteNumericMixin, Expression) - changed:
class Value(Expression) → class Value(SQLiteNumericMixin, Expression) - changed:
constructor Exists(queryset, negated=…, **kwargs) → constructor Exists(queryset, **kwargs) - changed:
method BaseExpression.get_group_by_cols(alias=…) → method BaseExpression.get_group_by_cols() - changed:
method Case.get_group_by_cols(alias=…) → method Case.get_group_by_cols() - changed:
method Col.get_group_by_cols(alias=…) → method Col.get_group_by_cols() - changed:
method ExpressionWrapper.get_group_by_cols(alias=…) → method ExpressionWrapper.get_group_by_cols() - changed:
method OrderBy.get_group_by_cols(alias=…) → method OrderBy.get_group_by_cols() - changed:
method RawSQL.get_group_by_cols(alias=…) → method RawSQL.get_group_by_cols() - changed:
method Ref.get_group_by_cols(alias=…) → method Ref.get_group_by_cols() - changed:
method ResolvedOuterRef.get_group_by_cols(alias=…) → method ResolvedOuterRef.get_group_by_cols() - changed:
method Subquery.as_sql(compiler, connection, template=…, query=…, **extra_context) → method Subquery.as_sql(compiler, connection, template=…, **extra_context) - changed:
method Subquery.get_group_by_cols(alias=…) → method Subquery.get_group_by_cols() - changed:
method Value.get_group_by_cols(alias=…) → method Value.get_group_by_cols() - changed:
method When.get_group_by_cols(alias=…) → method When.get_group_by_cols() - changed:
method Window.get_group_by_cols(alias=…) → method Window.get_group_by_cols() - changed:
method WindowFrame.get_group_by_cols(alias=…) → method WindowFrame.get_group_by_cols() - added:
class NegatedExpression(ExpressionWrapper) - added:
class OrderByList(Func) - added:
constructor NegatedExpression(expression) - added:
constructor OrderByList(*expressions, **extra) - added:
field BaseExpression.empty_result_set_value - added:
field Exists.empty_result_set_value - added:
field OrderByList.template - added:
field OuterRef.contains_over_clause - added:
field ResolvedOuterRef.contains_over_clause - added:
field Subquery.empty_result_set_value - added:
field Subquery.subquery - added:
function register_combinable_fields(lhs, connector, rhs, result) - added:
method BaseExpression.get_refs() - added:
method BaseExpression.prefix_references(prefix) - added:
method BaseExpression.replace_expressions(replacements) - added:
method DurationExpression.as_sqlite(compiler, connection, **extra_context) - added:
method ExpressionList.get_group_by_cols() - added:
method F.copy() - added:
method F.replace_expressions(replacements) - added:
method NegatedExpression.as_sql(compiler, connection) - added:
method NegatedExpression.resolve_expression(query=…, allow_joins=…, reuse=…, summarize=…, for_save=…) - added:
method NegatedExpression.select_format(compiler, sql, params) - added:
method OrderByList.as_sql(*args, **kwargs) - added:
method OrderByList.get_group_by_cols() - added:
method Ref.get_refs() - added:
property BaseExpression.contains_subquery - added:
property Value.empty_result_set_value - added:
variable NoneType
- removed:
field CharField.description - removed:
field NullBooleanField.system_check_deprecated_details - removed:
method NullBooleanField.get_internal_type() - 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=…) → 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=…) - added:
field Field.non_db_attrs - added:
field NullBooleanField.system_check_removed_details - added:
method CharField.db_parameters(connection) - added:
method IntegerField.get_db_prep_value(value, connection, prepared=…) - added:
method TextField.db_parameters(connection) - added:
property CharField.description - added:
property Field.error_messages
- changed:
class FieldFile(File) → class FieldFile(File, AltersData)
- removed:
method JSONField.get_prep_value(value) - added:
method JSONField.get_db_prep_save(value, connection) - added:
method JSONField.get_db_prep_value(value, connection, prepared=…)
- removed:
method ForeignKey.get_reverse_path_info(filtered_relation=…) - removed:
static method ForeignObject.get_lookups() - changed:
method ForeignObject.get_extra_restriction(where_class, alias, related_alias) → method ForeignObject.get_extra_restriction(alias, related_alias) - added:
constructor RelatedField(related_name=…, related_query_name=…, limit_choices_to=…, **kwargs) - added:
property ForeignObject.path_infos - added:
property ForeignObject.reverse_path_infos - added:
property ManyToManyField.path_infos - added:
property ManyToManyField.reverse_path_infos - added:
static method ForeignObject.get_class_lookups()
- added:
field MultiColSource.contains_over_clause - added:
method MultiColSource.resolve_expression(*args, **kwargs)
- changed:
method ForeignObjectRel.get_extra_restriction(where_class, alias, related_alias) → method ForeignObjectRel.get_extra_restriction(alias, related_alias) - added:
method ForeignObjectRel.get_lookups() - added:
method ForeignObjectRel.get_transform(name) - added:
property ForeignObjectRel.path_infos
- added:
method Cast.as_postgresql(compiler, connection, **extra_context) - added:
property Coalesce.empty_result_set_value
- added:
method Now.as_mysql(compiler, connection, **extra_context) - added:
method Now.as_sqlite(compiler, connection, **extra_context)
- changed:
class Round(Transform) → class Round(FixDecimalInputMixin, Transform) - changed:
method Random.get_group_by_cols(alias=…) → method Random.get_group_by_cols() - added:
constructor Round(expression, precision=…, **extra) - added:
field Round.arity - added:
method Round.as_sqlite(compiler, connection, **extra_context)
- changed:
method MySQLSHA2Mixin.as_mysql(compiler, connection, **extra_content) → method MySQLSHA2Mixin.as_mysql(compiler, connection, **extra_context) - changed:
method PostgreSQLSHAMixin.as_postgresql(compiler, connection, **extra_content) → method PostgreSQLSHAMixin.as_postgresql(compiler, connection, **extra_context) - added:
method ConcatPair.as_postgresql(compiler, connection, **extra_context)
- removed:
method Exact.process_rhs(compiler, connection) - removed:
method Lookup.as_sql(compiler, connection) - removed:
method Lookup.relabeled_clone(relabels) - removed:
property Lookup.contains_aggregate - removed:
property Lookup.contains_over_clause - removed:
property Lookup.is_summary - changed:
class Lookup → class Lookup(Expression) - changed:
class PostgresOperatorLookup(FieldGetDbPrepValueMixin, Lookup) → class PostgresOperatorLookup(Lookup) - changed:
method Lookup.get_group_by_cols(alias=…) → method Lookup.get_group_by_cols() - added:
method Exact.get_prep_lookup() - added:
method In.get_prep_lookup() - added:
method Lookup.get_prep_lhs() - added:
method Lookup.resolve_expression(query=…, allow_joins=…, reuse=…, summarize=…, for_save=…) - added:
method Lookup.select_format(compiler, sql, params) - added:
property Lookup.output_field
- removed:
property Options.installed
- changed:
class QuerySet → class QuerySet(AltersData) - changed:
method QuerySet.bulk_create(objs, batch_size=…, ignore_conflicts=…) → method QuerySet.bulk_create(objs, batch_size=…, ignore_conflicts=…, update_conflicts=…, update_fields=…, unique_fields=…) - added:
async method QuerySet.aaggregate(*args, **kwargs) - added:
async method QuerySet.abulk_create(objs, batch_size=…, ignore_conflicts=…, update_conflicts=…, update_fields=…, unique_fields=…) - added:
async method QuerySet.abulk_update(objs, fields, batch_size=…) - added:
async method QuerySet.acontains(obj) - added:
async method QuerySet.acount() - added:
async method QuerySet.acreate(**kwargs) - added:
async method QuerySet.adelete() - added:
async method QuerySet.aearliest(*fields) - added:
async method QuerySet.aexists() - added:
async method QuerySet.aexplain(*, format=…, **options) - added:
async method QuerySet.afirst() - added:
async method QuerySet.aget(*args, **kwargs) - added:
async method QuerySet.aget_or_create(defaults=…, **kwargs) - added:
async method QuerySet.ain_bulk(id_list=…, *, field_name=…) - added:
async method QuerySet.aiterator(chunk_size=…) - added:
async method QuerySet.alast() - added:
async method QuerySet.alatest(*fields) - added:
async method QuerySet.aupdate(**kwargs) - added:
async method QuerySet.aupdate_or_create(defaults=…, **kwargs) - added:
class RawModelIterable(BaseIterable) - added:
method QuerySet.contains(obj) - added:
variable PROHIBITED_FILTER_KWARGS
- removed:
class InvalidQuery(Exception) - removed:
class InvalidQueryType(type) - removed:
static method RegisterLookupMixin.get_lookups() - removed:
static method RegisterLookupMixin.register_lookup(lookup, lookup_name=…) - changed:
function select_related_descend(field, restricted, requested, load_fields, reverse=…) → function select_related_descend(field, restricted, requested, select_mask, reverse=…) - added:
class class_or_instance_method - added:
constructor class_or_instance_method(class_method, instance_method) - added:
field Q.XOR - added:
field Q.connectors - added:
field RegisterLookupMixin.get_class_lookups - added:
field RegisterLookupMixin.get_lookups - added:
field RegisterLookupMixin.register_class_lookup - added:
field RegisterLookupMixin.register_lookup - added:
method Q.check(against, using=…) - added:
method Q.flatten() - added:
method RegisterLookupMixin.get_class_lookups() - added:
method RegisterLookupMixin.get_instance_lookups() - added:
method RegisterLookupMixin.register_class_lookup(lookup, lookup_name=…) - added:
method RegisterLookupMixin.register_instance_lookup(lookup, lookup_name=…) - added:
variable logger
- added:
export XOR
- removed:
method SQLCompiler.deferred_to_columns() - changed:
constructor SQLCompiler(query, connection, using) → constructor SQLCompiler(query, connection, using, elide_empty=…) - changed:
method SQLCompiler.get_default_columns(start_alias=…, opts=…, from_parent=…) → method SQLCompiler.get_default_columns(select_mask, start_alias=…, opts=…, from_parent=…) - changed:
method SQLCompiler.get_related_selections(select, opts=…, root_alias=…, cur_depth=…, requested=…, restricted=…) → method SQLCompiler.get_related_selections(select, select_mask, opts=…, root_alias=…, cur_depth=…, requested=…, restricted=…) - changed:
method SQLCompiler.get_select() → method SQLCompiler.get_select(with_col_aliases=…) - changed:
method SQLCompiler.pre_sql_setup() → method SQLCompiler.pre_sql_setup(with_col_aliases=…) - changed:
method SQLCompiler.setup_query() → method SQLCompiler.setup_query(with_col_aliases=…) - added:
class PositionRef(Ref) - added:
constructor PositionRef(ordinal, refs, source) - added:
method PositionRef.as_sql(compiler, connection) - added:
method SQLCompiler.get_qualify_sql()
- removed:
variable ORDER_PATTERN
- changed:
method BaseTable.equals(other, with_filtered_relation) → method BaseTable.equals(other) - changed:
method Join.equals(other, with_filtered_relation) → method Join.equals(other)
- removed:
method Query.deferred_to_data(target, callback) - removed:
method Query.get_loaded_field_names() - removed:
method Query.get_loaded_field_names_cb(target, model, fields) - removed:
method Query.rewrite_cols(annotation, col_cnt) - removed:
property Query.has_select_fields - changed:
constructor Query(model, where=…, alias_cols=…) → constructor Query(model, alias_cols=…) - changed:
method Query.add_annotation(annotation, alias, is_summary=…, select=…) → method Query.add_annotation(annotation, alias, select=…) - changed:
method Query.add_filter(filter_clause) → method Query.add_filter(filter_lhs, filter_rhs) - changed:
method Query.build_filter(filter_expr, branch_negated=…, current_negated=…, can_reuse=…, allow_joins=…, split_subq=…, reuse_with_filtered_relation=…, check_filterable=…) → method Query.build_filter(filter_expr, branch_negated=…, current_negated=…, can_reuse=…, allow_joins=…, split_subq=…, reuse_with_filtered_relation=…, check_filterable=…, summarize=…) - changed:
method Query.bump_prefix(outer_query) → method Query.bump_prefix(other_query, exclude=…) - changed:
method Query.clear_ordering(force_empty) → method Query.clear_ordering(force=…, clear_default=…) - changed:
method Query.exists(using, limit=…) → method Query.exists(limit=…) - changed:
method Query.get_aggregation(using, added_aggregate_names) → method Query.get_aggregation(using, aggregate_exprs) - changed:
method Query.get_compiler(using=…, connection=…) → method Query.get_compiler(using=…, connection=…, elide_empty=…) - changed:
method Query.resolve_lookup_value(value, can_reuse, allow_joins) → method Query.resolve_lookup_value(value, can_reuse, allow_joins, summarize=…) - changed:
method Query.solve_lookup_type(lookup) → method Query.solve_lookup_type(lookup, summarize=…) - added:
field Query.annotation_select_mask - added:
field Query.base_table_class - added:
field Query.combinator - added:
field Query.combinator_all - added:
field Query.combined_queries - added:
field Query.default_cols - added:
field Query.default_ordering - added:
field Query.deferred_loading - added:
field Query.distinct - added:
field Query.distinct_fields - added:
field Query.empty_result_set_value - added:
field Query.explain_info - added:
field Query.extra_order_by - added:
field Query.extra_select_mask - added:
field Query.extra_tables - added:
field Query.filter_is_sticky - added:
field Query.group_by - added:
field Query.has_select_fields - added:
field Query.high_mark - added:
field Query.join_class - added:
field Query.low_mark - added:
field Query.max_depth - added:
field Query.order_by - added:
field Query.select - added:
field Query.select_for_no_key_update - added:
field Query.select_for_update - added:
field Query.select_for_update_nowait - added:
field Query.select_for_update_of - added:
field Query.select_for_update_skip_locked - added:
field Query.select_related - added:
field Query.standard_ordering - added:
field Query.subquery - added:
field Query.values_select - added:
method Query.clear_where() - added:
method Query.get_group_by_cols(wrapper=…) - added:
method Query.get_select_mask()
- changed:
constructor InsertQuery(*args, ignore_conflicts=…, **kwargs) → constructor InsertQuery(*args, on_conflict=…, update_fields=…, unique_fields=…, **kwargs)
- removed:
method WhereNode.copy() - removed:
method WhereNode.split_having(negated=…) - changed:
method WhereNode.get_group_by_cols(alias=…) → method WhereNode.get_group_by_cols() - added:
field ExtraWhere.contains_over_clause - added:
field NothingNode.contains_over_clause - added:
field SubqueryConstraint.contains_over_clause - added:
method WhereNode.get_db_converters(connection) - added:
method WhereNode.get_lookup(lookup) - added:
method WhereNode.get_refs() - added:
method WhereNode.leaves() - added:
method WhereNode.replace_expressions(replacements) - added:
method WhereNode.select_format(compiler, sql, params) - added:
method WhereNode.split_having_qualify(negated=…, must_group_by=…) - added:
property WhereNode.output_field - added:
variable XOR
- added:
class AltersData
- changed:
function on_commit(func, using=…) → function on_commit(func, using=…, robust=…)
- removed:
method ConnectionHandler.close_all() - removed:
method ConnectionHandler.ensure_defaults(alias) - removed:
method ConnectionHandler.prepare_test_settings(alias)
- changed:
constructor Signal(providing_args=…, use_caching=…) → constructor Signal(use_caching=…)
- changed:
method BoundField.label_tag(contents=…, attrs=…, label_suffix=…) → method BoundField.label_tag(contents=…, attrs=…, label_suffix=…, tag=…) - added:
method BoundField.legend_tag(contents=…, attrs=…, label_suffix=…) - added:
property BoundField.use_fieldset
- changed:
constructor IntegerField(*, max_value=…, min_value=…, **kwargs) → constructor IntegerField(*, max_value=…, min_value=…, step_size=…, **kwargs) - changed:
method FileField.bound_data(data, initial) → method FileField.bound_data(_, initial)
- removed:
method BaseForm.as_p() - removed:
method BaseForm.as_table() - removed:
method BaseForm.as_ul() - changed:
class BaseForm → class BaseForm(RenderableFormMixin) - added:
field BaseForm.template_name_div - added:
field BaseForm.template_name_label - added:
field BaseForm.template_name_p - added:
field BaseForm.template_name_table - added:
field BaseForm.template_name_ul - added:
method BaseForm.get_context() - added:
property BaseForm.template_name
- removed:
method BaseFormSet.as_p() - removed:
method BaseFormSet.as_table() - removed:
method BaseFormSet.as_ul() - changed:
class BaseFormSet → class BaseFormSet(RenderableFormMixin) - changed:
function formset_factory(form, formset=…, extra=…, can_order=…, can_delete=…, max_num=…, validate_max=…, min_num=…, validate_min=…, absolute_max=…, can_delete_extra=…) → function formset_factory(form, formset=…, extra=…, can_order=…, can_delete=…, max_num=…, validate_max=…, min_num=…, validate_min=…, absolute_max=…, can_delete_extra=…, renderer=…) - added:
field BaseFormSet.deletion_widget - added:
field BaseFormSet.template_name_div - added:
field BaseFormSet.template_name_p - added:
field BaseFormSet.template_name_table - added:
field BaseFormSet.template_name_ul - added:
method BaseFormSet.get_context() - added:
property BaseFormSet.template_name - added:
static method BaseFormSet.get_deletion_widget()
- changed:
class BaseModelForm(BaseForm) → class BaseModelForm(BaseForm, AltersData) - changed:
class BaseModelFormSet(BaseFormSet) → class BaseModelFormSet(BaseFormSet, AltersData) - changed:
function inlineformset_factory(parent_model, model, form=…, formset=…, fk_name=…, fields=…, exclude=…, extra=…, can_order=…, can_delete=…, max_num=…, formfield_callback=…, widgets=…, validate_max=…, localized_fields=…, labels=…, help_texts=…, error_messages=…, min_num=…, validate_min=…, field_classes=…, absolute_max=…, can_delete_extra=…) → function inlineformset_factory(parent_model, model, form=…, formset=…, fk_name=…, fields=…, exclude=…, extra=…, can_order=…, can_delete=…, max_num=…, formfield_callback=…, widgets=…, validate_max=…, localized_fields=…, labels=…, help_texts=…, error_messages=…, min_num=…, validate_min=…, field_classes=…, absolute_max=…, can_delete_extra=…, renderer=…, edit_only=…) - changed:
function modelformset_factory(model, form=…, formfield_callback=…, formset=…, extra=…, can_delete=…, can_order=…, max_num=…, fields=…, exclude=…, widgets=…, validate_max=…, localized_fields=…, labels=…, help_texts=…, error_messages=…, min_num=…, validate_min=…, field_classes=…, absolute_max=…, can_delete_extra=…) → function modelformset_factory(model, form=…, formfield_callback=…, formset=…, extra=…, can_delete=…, can_order=…, max_num=…, fields=…, exclude=…, widgets=…, validate_max=…, localized_fields=…, labels=…, help_texts=…, error_messages=…, min_num=…, validate_min=…, field_classes=…, absolute_max=…, can_delete_extra=…, renderer=…, edit_only=…) - added:
field BaseModelFormSet.edit_only
- removed:
variable ROOT - added:
class DjangoDivFormRenderer(DjangoTemplates) - added:
class Jinja2DivFormRenderer(Jinja2) - added:
field BaseRenderer.form_template_name - added:
field BaseRenderer.formset_template_name - added:
field DjangoDivFormRenderer.form_template_name - added:
field DjangoDivFormRenderer.formset_template_name - added:
field Jinja2DivFormRenderer.form_template_name - added:
field Jinja2DivFormRenderer.formset_template_name
- removed:
method ErrorDict.as_json(escape_html=…) - removed:
method ErrorDict.as_text() - removed:
method ErrorDict.as_ul() - removed:
method ErrorList.as_json(escape_html=…) - removed:
method ErrorList.as_text() - removed:
method ErrorList.as_ul() - changed:
class ErrorDict(dict) → class ErrorDict(dict, RenderableErrorMixin) - changed:
class ErrorList(UserList, list) → class ErrorList(UserList, list, RenderableErrorMixin) - changed:
constructor ErrorList(initlist=…, error_class=…) → constructor ErrorList(initlist=…, error_class=…, renderer=…) - added:
class RenderableErrorMixin(RenderableMixin) - added:
class RenderableFormMixin(RenderableMixin) - added:
class RenderableMixin - added:
constructor ErrorDict(*args, renderer=…, **kwargs) - added:
field ErrorDict.template_name - added:
field ErrorDict.template_name_text - added:
field ErrorDict.template_name_ul - added:
field ErrorList.template_name - added:
field ErrorList.template_name_text - added:
field ErrorList.template_name_ul - added:
method ErrorDict.get_context() - added:
method ErrorList.get_context() - added:
method RenderableErrorMixin.as_json(escape_html=…) - added:
method RenderableErrorMixin.as_text() - added:
method RenderableErrorMixin.as_ul() - added:
method RenderableFormMixin.as_div() - added:
method RenderableFormMixin.as_p() - added:
method RenderableFormMixin.as_table() - added:
method RenderableFormMixin.as_ul() - added:
method RenderableMixin.get_context() - added:
method RenderableMixin.render(template_name=…, context=…, renderer=…) - added:
variable DEFAULT_TEMPLATE_DEPRECATION_MSG
- removed:
method CheckboxSelectMultiple.id_for_label(id_, index=…) - changed:
class CheckboxSelectMultiple(ChoiceWidget) → class CheckboxSelectMultiple(RadioSelect) - added:
field MultiWidget.use_fieldset - added:
field RadioSelect.use_fieldset - added:
field SelectDateWidget.use_fieldset - added:
field Widget.use_fieldset - added:
method RadioSelect.id_for_label(id_, index=…)
- added:
export HttpHeaders - added:
export HttpResponseBase
- added:
field MultiPartParser.boundary_re
- removed:
method HttpRequest.get_raw_uri() - removed:
method HttpRequest.is_ajax() - added:
static method HttpHeaders.to_asgi_name(header) - added:
static method HttpHeaders.to_asgi_names(headers) - added:
static method HttpHeaders.to_wsgi_name(header) - added:
static method HttpHeaders.to_wsgi_names(headers)
- changed:
constructor CacheMiddleware(get_response=…, cache_timeout=…, page_timeout=…, **kwargs) → constructor CacheMiddleware(get_response, cache_timeout=…, page_timeout=…, **kwargs) - changed:
constructor FetchFromCacheMiddleware(get_response=…) → constructor FetchFromCacheMiddleware(get_response) - changed:
constructor UpdateCacheMiddleware(get_response=…) → constructor UpdateCacheMiddleware(get_response) - added:
property FetchFromCacheMiddleware.cache - added:
property UpdateCacheMiddleware.cache
- removed:
variable REASON_BAD_TOKEN - added:
class InvalidTokenFormat(Exception) - added:
class RejectRequest(Exception) - added:
constructor InvalidTokenFormat(reason) - added:
constructor RejectRequest(reason) - added:
property CsrfViewMiddleware.allowed_origin_subdomains - added:
property CsrfViewMiddleware.allowed_origins_exact - added:
property CsrfViewMiddleware.csrf_trusted_origins_hosts - added:
variable REASON_BAD_ORIGIN - added:
variable REASON_CSRF_TOKEN_MISSING - added:
variable REASON_INCORRECT_LENGTH - added:
variable REASON_INVALID_CHARACTERS - added:
variable invalid_token_chars_re
- added:
field GZipMiddleware.max_random_bytes
- changed:
constructor SecurityMiddleware(get_response=…) → constructor SecurityMiddleware(get_response)
- added:
function get_template_tag_modules()
- removed:
variable TRANSLATOR_COMMENT_MARK - added:
field TextNode.child_nodelists - added:
field VariableNode.child_nodelists - added:
method TextNode.render_annotated(context)
- changed:
function json_script(value, element_id) → function json_script(value, element_id=…)
- removed:
class IfEqualNode(Node) - removed:
constructor IfEqualNode(var1, var2, nodelist_true, nodelist_false, negate) - removed:
field IfEqualNode.child_nodelists - removed:
function do_ifequal(parser, token, negate) - removed:
function ifequal(parser, token) - removed:
function ifnotequal(parser, token) - removed:
method IfEqualNode.render(context) - added:
field CommentNode.child_nodelists - added:
field CsrfTokenNode.child_nodelists - added:
field LoadNode.child_nodelists - added:
field URLNode.child_nodelists
- added:
field SimpleNode.child_nodelists
- added:
field TranslateNode.child_nodelists
- added:
field StaticNode.child_nodelists
- added:
class UnknownTimezoneException(BaseException) - added:
function timezone_constructor(tzname)
- changed:
constructor ResolverMatch(func, args, kwargs, url_name=…, app_names=…, namespaces=…, route=…, tried=…) → constructor ResolverMatch(func, args, kwargs, url_name=…, app_names=…, namespaces=…, route=…, tried=…, captured_kwargs=…, extra_kwargs=…)
- removed:
variable get_running_loop - added:
class aclosing(AbstractAsyncContextManager) - added:
constructor aclosing(thing)
- changed:
method BaseConnectionHandler.all() → method BaseConnectionHandler.all(initialized_only=…) - added:
method BaseConnectionHandler.close_all()
- removed:
variable NOT_PROVIDED - changed:
function get_random_string(length=…, allowed_chars=…) → function get_random_string(length, allowed_chars=…) - added:
function md5(data=…, *, usedforsecurity=…) - added:
function new_hash(hash_algorithm, *, usedforsecurity=…) - added:
variable md5 - added:
variable new_hash
- removed:
class time(real_time)
- removed:
class RemovedInDjango40Warning(DeprecationWarning) - removed:
class RemovedInDjango41Warning(PendingDeprecationWarning) - changed:
constructor MiddlewareMixin(get_response=…) → constructor MiddlewareMixin(get_response) - added:
class RemovedInDjango50Warning(DeprecationWarning) - added:
class RemovedInDjango51Warning(PendingDeprecationWarning) - added:
variable RemovedAfterNextVersionWarning
- removed:
function force_text(s, encoding=…, strings_only=…, errors=…) - removed:
function smart_text(s, encoding=…, strings_only=…, errors=…)
- changed:
function get_format_modules(lang=…, reverse=…) → function get_format_modules(lang=…) - added:
function sanitize_strftime_format(fmt)
- removed:
variable DOTS - removed:
variable TRAILING_PUNCTUATION_CHARS - removed:
variable WRAPPING_PUNCTUATION - removed:
variable simple_url_2_re - removed:
variable simple_url_re - removed:
variable word_split_re - changed:
function json_script(value, element_id) → function json_script(value, element_id=…, encoder=…) - added:
class CountsDict(dict) - added:
class Urlizer - added:
constructor CountsDict(*args, word, **kwargs) - added:
field Urlizer.mailto_template - added:
field Urlizer.simple_url_2_re - added:
field Urlizer.simple_url_re - added:
field Urlizer.trailing_punctuation_chars - added:
field Urlizer.url_template - added:
field Urlizer.word_split_re - added:
field Urlizer.wrapping_punctuation - added:
method Urlizer.handle_word(word, *, safe_input, trim_url_limit=…, nofollow=…, autoescape=…) - added:
method Urlizer.trim_punctuation(word) - added:
method Urlizer.trim_url(x, *, limit) - added:
property Urlizer.trailing_punctuation_chars_has_semicolon - added:
property Urlizer.trailing_punctuation_chars_no_semicolon - added:
property Urlizer.wrapping_punctuation_openings - added:
static method Urlizer.is_email_simple(value) - added:
variable MAX_STRIP_TAGS_DEPTH - added:
variable long_open_tag_without_closing_re - added:
variable urlizer
- removed:
function is_safe_url(url, allowed_hosts, require_https=…) - removed:
function parse_qsl(qs, keep_blank_values=…, strict_parsing=…, encoding=…, errors=…, max_num_fields=…, separator=…) - removed:
function urlquote(url, safe=…) - removed:
function urlquote_plus(url, safe=…) - removed:
function urlunquote(quoted_url) - removed:
function urlunquote_plus(quoted_url) - added:
function content_disposition_header(as_attachment, filename) - added:
function parse_header_parameters(line) - added:
variable MAX_URL_LENGTH - added:
variable MAX_URL_REDIRECT_LENGTH
- changed:
function clean_ipv6_address(ip_str, unpack_ipv4=…, error_message=…) → function clean_ipv6_address(ip_str, unpack_ipv4=…, error_message=…, max_length=…) - changed:
function is_valid_ipv6_address(ip_str) → function is_valid_ipv6_address(ip_addr) - added:
variable MAX_IPV6_ADDRESS_LENGTH
- changed:
function log_response(message, *args, response=…, request=…, logger=…, level=…, exc_info=…) → function log_response(message, *args, response=…, request=…, logger=…, level=…, exception=…)
- added:
function cached_import(module_path, class_name)
- removed:
function unescape_entities(text) - changed:
function compress_sequence(sequence) → function compress_sequence(sequence, *, max_random_bytes=…) - changed:
function compress_string(s) → function compress_string(s, *, max_random_bytes=…)
- removed:
variable TIMESINCE_CHUNKS - added:
variable MONTHS_DAYS - added:
variable TIME_CHUNKS - added:
variable TIME_STRINGS_KEYS
- removed:
variable utc - added:
function localdate(value=…, timezone=…)
- removed:
function ugettext(message) - removed:
function ugettext_lazy(message) - removed:
function ugettext_noop(message) - removed:
function ungettext(singular, plural, number) - removed:
function ungettext_lazy(singular, plural, number=…) - removed:
variable LANGUAGE_SESSION_KEY
- added:
variable TRANSLATOR_COMMENT_MARK
- removed:
variable ACCEPT_LANGUAGE_HEADER_MAX_LENGTH - changed:
function reset_cache(**kwargs) → function reset_cache(*, setting, **kwargs) - added:
variable LANGUAGE_CODE_MAX_LENGTH
- changed:
method Node.add(data, conn_type, squash=…) → method Node.add(data, conn_type) - added:
field Node.copy - added:
static method Node.create(children=…, connector=…, negated=…)
- added:
variable PY311 - added:
variable PY312
- removed:
variable CURRENT_DIR - added:
function builtin_template_path(name) - added:
function get_caller(request) - added:
method SafeExceptionReporterFilter.get_safe_cookies(request)
- added:
method View.view_is_async()
- changed:
class BaseDeleteView(DeletionMixin, BaseDetailView) → class BaseDeleteView(DeletionMixin, FormMixin, BaseDetailView) - added:
class DeleteViewCustomDeleteWarning(Warning) - added:
constructor BaseDeleteView(*args, **kwargs) - added:
field BaseDeleteView.form_class - added:
method BaseDeleteView.form_valid(form) - added:
method BaseDeleteView.post(request, *args, **kwargs)
- changed:
function was_modified_since(header=…, mtime=…, size=…) → function was_modified_since(header=…, mtime=…)